Java编程中最基础的文件和目录操作方法详解
文件操作
平常经常使用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