0.Java文件系统简介
Java文件系统看起来还挺复杂,W3c上面和文件操作相关的就包括文件介绍、输入流、输出流、阅读器写入器。Java对于文件系统的实现主要包含两种方式:基于阻塞模式的IO的文件系统
、JDK7+基于NIO.2的文件系统
。前者的主要实现代码保存在packagejava.io
中,后者保存在java.nio
中。和以前的方法一样,最底层都是调用了native方法,也就是用C语言实现的。
1.Java文件读写操作
1.1 FileInputStream/FileOutputStream
1.1.1 FileInputStream读文件
文件读取主要使用的是FileInputStream
类,该类创建实例时向构造函数传入文件地址,返回该文件对应的FileInputStream实例。类中的read
方法一次可以读入一个或多个字节的内容,当读取到文件结尾时返回-1。具体代码如下:
public class TestProject { public static void main(String argvs[]){ try{ java.io.FileInputStream myFileInput = new java.io.FileInputStream("c:/windows/temp/1.txt"); byte byteData; while ((byteData = (byte) myFileInput.read()) != -1){//read方法不传参数每次读取一个字节内容,如果读到文件结尾返回-1 System.out.print((char)byteData); } myFileInput.close(); } catch (java.io.FileNotFoundException e){ System.out.println("File Not Found!"); } catch (java.io.IOException e) { e.printStackTrace(); } } }
1.1.2 FileOutputStream写文件
写文件调用的FileOutputStream
类的write
方法。具体代码如下:
public class TestProject { public static void main(String argvs[]){ try{ java.io.FileOutputStream myFout = new java.io.FileOutputStream("c:/windows/temp/2.txt");//打开文件 String myWords = "Hello jus4fun!"; myFout.write(myWords.getBytes());//写入 myFout.flush();//刷新 myFout.close();//关闭 }catch (java.io.FileNotFoundException e){ System.out.println("File Not Found"); }catch (java.io.IOException e){ System.out.println("IOException"); } } }
1.2 RandomAccessFile随机访问文件
说是随机访问文件,其实就是可以从文件读取以及写入文件。具体实现存放于java.io.RandomAccessFile
类中。RandomAccessFile
类的一个对象可以进行随机文件访问,可以在文件中的任何位置读取或写入。RandomAccessFile
类的对象对文件的操作权限包含以下四种模式:
模式 | 含义 |
---|---|
r | 只读模式 |
rw | 读写模式,文件不存在则创建 |
rws | 读写模式,对文件的内容及其元数据的任何修改立即被写入存储设备 |
rwd | 读写模式,对文件内容的任何修改立即写入存储设备 |
读取写入文件的代码如下:
public class TestProject { public void myReadFile(String fileName){ try { java.io.RandomAccessFile myRaf = new java.io.RandomAccessFile(fileName, "r"); System.out.println(myRaf.readUTF()); myRaf.close(); }catch (java.io.FileNotFoundException e){ System.out.println("File not found!"); }catch (java.io.IOException e){ System.out.println(e); } } public void myWriteFile(String fileName,String content){ try { java.io.RandomAccessFile myRaf = new java.io.RandomAccessFile(fileName, "rw"); myRaf.writeUTF(content); myRaf.close(); }catch (java.io.FileNotFoundException e){ System.out.println("File not found!"); }catch (java.io.IOException e){ System.out.println(e); } } public static void main(String argvs[]){ String targetFile = "C:/Windows/Temp/test.txt"; String content = "我带你们打"; TestProject test = new TestProject(); test.myWriteFile(targetFile,content); test.myReadFile(targetFile); } }
1.3 利用nio的FileSystemProvider读写文件
public class TestProject { public void myReadFile(String fileName){ try{ java.nio.file.Path path = java.nio.file.Paths.get(fileName); byte[] bytes = java.nio.file.Files.readAllBytes(path); System.out.println(new String(bytes)); }catch (java.io.IOException e){ System.out.println(e.getStackTrace()); } } public void myWriteFile(String fileName,String content){ try{ java.nio.file.Path path = java.nio.file.Paths.get(fileName); java.nio.file.Files.write(path, content.getBytes()); }catch (java.io.IOException e){ System.out.println(e.getStackTrace()); } } public static void main(String argvs[]){ String targetFile = "C:/Windows/Temp/test.txt"; String content = "我带你们打"; TestProject test = new TestProject(); test.myWriteFile(targetFile,content); test.myReadFile(targetFile); } }