欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java编程中最基础的文件和目录操作方法详解

程序员文章站 2024-03-06 23:06:38
文件操作 平常经常使用java对文件进行读写等操作,这里汇总一下常用的文件操作。 1、创建文件 public static boolean createfil...

文件操作

平常经常使用java对文件进行读写等操作,这里汇总一下常用的文件操作。

1、创建文件

public static boolean createfile(string filepath){ 
  boolean result = false; 
  file file = new file(filepath); 
  if(!file.exists()){ 
    try { 
      result = file.createnewfile(); 
    } catch (ioexception e) { 
      e.printstacktrace(); 
    } 
  } 
   
  return result; 
} 

2、创建文件夹

public static boolean createdirectory(string directory){ 
  boolean result = false; 
  file file = new file(directory); 
  if(!file.exists()){ 
    result = file.mkdirs(); 
  } 
   
  return result; 
} 

3、删除文件

public static boolean deletefile(string filepath){ 
  boolean result = false; 
  file file = new file(filepath); 
  if(file.exists() && file.isfile()){ 
    result = file.delete(); 
  } 
   
  return result; 
} 

4、删除文件夹

递归删除文件夹下面的子文件和文件夹

public static void deletedirectory(string filepath){ 
  file file = new file(filepath); 
  if(!file.exists()){ 
    return; 
  } 
   
  if(file.isfile()){ 
    file.delete(); 
  }else if(file.isdirectory()){ 
    file[] files = file.listfiles(); 
    for (file myfile : files) { 
      deletedirectory(filepath + "/" + myfile.getname()); 
    } 
     
    file.delete(); 
  } 
} 

5、读文件

(1)以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件

public static string readfilebybytes(string filepath){ 
  file file = new file(filepath); 
  if(!file.exists() || !file.isfile()){ 
    return null; 
  } 
   
  stringbuffer content = new stringbuffer(); 
   
  try { 
    byte[] temp = new byte[1024]; 
    fileinputstream fileinputstream = new fileinputstream(file); 
    while(fileinputstream.read(temp) != -1){ 
      content.append(new string(temp)); 
      temp = new byte[1024]; 
    } 
     
    fileinputstream.close(); 
  } catch (filenotfoundexception e) { 
    e.printstacktrace(); 
  } catch (ioexception e) { 
    e.printstacktrace(); 
  } 
   
  return content.tostring(); 
} 

 (2)以字符为单位读取文件,常用于读文本,数字等类型的文件,支持读取中文

public static string readfilebychars(string filepath){ 
  file file = new file(filepath); 
  if(!file.exists() || !file.isfile()){ 
    return null; 
  } 
   
  stringbuffer content = new stringbuffer(); 
  try { 
    char[] temp = new char[1024]; 
    fileinputstream fileinputstream = new fileinputstream(file); 
    inputstreamreader inputstreamreader = new inputstreamreader(fileinputstream, "gbk"); 
    while(inputstreamreader.read(temp) != -1){ 
      content.append(new string(temp)); 
      temp = new char[1024]; 
    } 
     
    fileinputstream.close(); 
    inputstreamreader.close(); 
  } catch (filenotfoundexception e) { 
    e.printstacktrace(); 
  } catch (ioexception e) { 
    e.printstacktrace(); 
  } 
   
  return content.tostring(); 
} 

(3)以行为单位读取文件,常用于读面向行的格式化文件

public static list<string> readfilebylines(string filepath){ 
  file file = new file(filepath); 
  if(!file.exists() || !file.isfile()){ 
    return null; 
  } 
   
  list<string> content = new arraylist<string>(); 
  try { 
    fileinputstream fileinputstream = new fileinputstream(file); 
    inputstreamreader inputstreamreader = new inputstreamreader(fileinputstream, "gbk"); 
    bufferedreader reader = new bufferedreader(inputstreamreader); 
    string linecontent = ""; 
    while ((linecontent = reader.readline()) != null) { 
      content.add(linecontent); 
      system.out.println(linecontent); 
    } 
     
    fileinputstream.close(); 
    inputstreamreader.close(); 
    reader.close(); 
  } catch (filenotfoundexception e) { 
    e.printstacktrace(); 
  } catch (ioexception e) { 
    e.printstacktrace(); 
  } 
   
  return content; 
} 

6、写文件

字符串写入文件的几个类中,filewriter效率最高,bufferedoutputstream次之,fileoutputstream最差。

(1)通过fileoutputstream写入文件

public static void writefilebyfileoutputstream(string filepath, string content) throws ioexception{ 
  file file = new file(filepath); 
  synchronized (file) { 
    fileoutputstream fos = new fileoutputstream(filepath); 
    fos.write(content.getbytes("gbk")); 
    fos.close(); 
  } 
} 

(2)通过bufferedoutputstream写入文件

public static void writefilebybufferedoutputstream(string filepath, string content) throws ioexception{ 
  file file = new file(filepath); 
  synchronized (file) { 
    bufferedoutputstream fos = new bufferedoutputstream(new fileoutputstream(filepath)); 
    fos.write(content.getbytes("gbk")); 
    fos.flush(); 
    fos.close(); 
  } 
} 

(3)通过filewriter将字符串写入文件

public static void writefilebyfilewriter(string filepath, string content) throws ioexception{ 
    file file = new file(filepath); 
    synchronized (file) { 
      filewriter fw = new filewriter(filepath); 
      fw.write(content); 
      fw.close(); 
    } 
  } 

目录操作
目录是一个文件可以包含其他文件和目录的列表。你想要在目录中列出可用文件列表,可以通过使用 file 对象创建目录,获得完整详细的能在 file 对象中调用的以及有关目录的方法列表。

创建目录
这里有两个有用的文件方法,能够创建目录:

mkdir( ) 方法创建了一个目录,成功返回 true ,创建失败返回 false。失败情况是指文件对象的路径已经存在了,或者无法创建目录,因为整个路径不存在。
mkdirs( ) 方法创建一个目录和它的上级目录。
以下示例创建 “/ tmp / user / java / bin” 目录:

import java.io.file;

public class createdir {
  public static void main(string args[]) {
   string dirname = "/tmp/user/java/bin";
   file d = new file(dirname);
   // create directory now.
   d.mkdirs();
 }
}

编译并执行以上代码创建 “/ tmp /user/ java / bin”。

提示:java 自动按 unix 和 windows 约定来处理路径分隔符。如果在 windows 版本的 java 中使用正斜杠(/),仍然可以得到正确的路径。

目录列表
如下,你能够用 file 对象提供的 list() 方法来列出目录中所有可用的文件和目录

import java.io.file;

public class readdir {
  public static void main(string[] args) {

   file file = null;
   string[] paths;

   try{   
     // create new file object
     file = new file("/tmp");

     // array of files and directory
     paths = file.list();

     // for each name in the path array
     for(string path:paths)
     {
      // prints filename and directory name
      system.out.println(path);
     }
   }catch(exception e){
     // if any error occurs
     e.printstacktrace();
   }
  }
}

基于你/ tmp目录下可用的目录和文件,将产生以下结果:

test1.txt
test2.txt
readdir.java
readdir.class