Java IO主要可分为两部分,一部分是对文件自己的操做,一部分是对文件内容的操做。 1、对文件自己操做 该部分所对应的主要类是File,主要操做以下:
package com.ass; import java.io.File; import java.io.IOException; public class FileTest { public static void main(String[] args) throws IOException { File file = new File("E://test.txt"); System.out.println("文件是否可执行:" + file.canExecute()); System.out.println("文件是否可读取:" + file.canRead()); System.out.println("文件是否可写入:" + file.canWrite()); System.out.println("文件是否可存在:" + file.exists()); System.out.println("获取文件真是路径:" + file.getAbsolutePath()); System.out.println("获取文件父路径:" + file.getParent()); System.out.println("判断是不是文件夹:" + file.isDirectory()); System.out.println("设置文件为只读权限:" + file.setReadOnly()); System.out.println("设置文件读权限:" + file.setReadable(true)); System.out.println("设置文件写读权限:" + file.setWritable(true)); System.out.println("设置文件可执行权限:" + file.setExecutable(true)); } }
其余操做可查看jdk文档
2、对文件内容进行操做 (一)、经过字节流操做文件内容 该操做主要由抽象类java.io.InputStream及其子类,抽象类java.io.OutputStream及其子类进行。 一、输入流 InputStream(输入流-抽象类)->FileInputStream(文件输入流) ->BufferedInputStream(缓存输入流-效率高) 主要由以上三个类组成,基本操做以下:
package com.ass.io; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; public class FileInputOpt { public static void main(String[] args) throws IOException { // 使用InputStream // InputStream i=System.in; // int tempStr1=0; // while ((tempStr1=i.read()) != -1) { // System.out.print((char)tempStr1); // } // i.close(); // 使用FileInputStream File file = new File("E://test.txt"); FileInputStream in = new FileInputStream(file); int tempStr2 = 0; System.out.println("FileInputStream s"); while ((tempStr2 = in.read()) != -1) { System.out.print((char) tempStr2); } in.close(); System.out.println(); System.out.println("FileInputStream e"); BufferedInputStream bu = new BufferedInputStream(new FileInputStream(file)); int tempStr3 = 0; System.out.println("BufferedInputStream s"); while ((tempStr3 = bu.read()) != -1) { System.out.print((char) tempStr3); } bu.close(); System.out.println(); System.out.println("BufferedInputStream e"); } }
二、输出流 OutputStream(输出流-抽象类)->FileOutputStream(文件输出流) ->BufferedOutputStream(缓存输出流-效率高) 主要由以上三个类组成,基本操做以下:
package com.ass.io; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; public class FileOutputOpt { public static void main(String args[]) throws IOException { OutputStream out=null; // out=new FileOutputStream(new File("E://test.txt")); // 使用FileOutputStream out=new BufferedOutputStream(new FileOutputStream(new File("E://test.txt"))); //使用BufferedOutputStream out.write("test".getBytes()); out.write("\r\n".getBytes()); out.write("test1".getBytes()); } }
(二)、经过字符流对文件内容进行操做 (1)、输入流 Reader(字符流-抽象类)->FileReader(文件字符流) ->BufferedReader(缓存字符流) ->LineNumberReader(缓存字符流->可获取行号) 主要由以上4个类构成,具体操做以下:
package com.ass.io; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.LineNumberReader; public class FileInputCharOpt { public static void main(String args[]) { // 使用FileReader try { FileReader fileReader = new FileReader(new File("E://test.txt")); int read; System.out.println("FileReader s:"); while ((read = fileReader.read()) != -1) { System.out.print((char) read); } System.out.println(); System.out.println("FileReader e:"); fileReader.close(); } catch (IOException e) { e.printStackTrace(); } // 使用BufferedReader try { BufferedReader bufferedReader = new BufferedReader(new FileReader(new File("E://test.txt"))); System.out.println("BufferedReader s:"); String strTemp = ""; while ((strTemp = bufferedReader.readLine()) != null) { System.out.println(strTemp); } System.out.println("BufferedReader e:"); bufferedReader.close(); } catch (IOException e) { e.printStackTrace(); } // 使用LineNumberReader,有获取行号的方法 try { LineNumberReader lineNumberReader = new LineNumberReader(new FileReader(new File("E://test.txt"))); System.out.println("LineNumberReader s:"); String strTemp = ""; while ((strTemp = lineNumberReader.readLine()) != null) { System.out.println("内容:" + strTemp); System.out.println("行号:" + lineNumberReader.getLineNumber()); } System.out.println("LineNumberReader e:"); lineNumberReader.close(); } catch (IOException e) { e.printStackTrace(); } // 使用读取器InputStreamReader,可将输入流转换为读取器(注:目前没有遇到在哪能够用这种状况) try { LineNumberReader lineNumberReader = new LineNumberReader(new InputStreamReader(System.in)); System.out.println("LineNumberReader s:"); String strTemp = ""; while ((strTemp = lineNumberReader.readLine()) != null) { System.out.println("内容:" + strTemp); System.out.println("行号:" + lineNumberReader.getLineNumber()); } System.out.println("LineNumberReader e:"); lineNumberReader.close(); } catch (IOException e) { e.printStackTrace(); } } }
(2)、输出流 Writer(字符流-抽象类)->FileWriter(文件字符流流) ->BufferedWriter(缓存字符流) 主要由以上两个类构成,具体操做以下:
package com.ass.io; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; public class FileOutputCharOpt { public static void main(String[] args) { // 使用FileWriter操做文件 try { FileWriter fileWriter = new FileWriter(new File("E://test.txt")); fileWriter.write("test"); fileWriter.write("\r\n"); fileWriter.write("test1"); fileWriter.close(); } catch (IOException e) { e.printStackTrace(); } // 使用BufferedWriter操做文件 try { BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(new File("E://test.txt"))); bufferedWriter.write("test"); bufferedWriter.newLine(); bufferedWriter.write("test1"); bufferedWriter.close(); } catch (IOException e) { e.printStackTrace(); } } }
(三)、随机访问文件(RandomAccessFile) 该类能够对进行随机的读写操做,操做方法可查看API文档,注意其构造方法传参: **构造方法中mode传r表明读,rw表明写,具体可看源码** (四)、标准输出: PrintStream(处理字节强) PrintWirter(处理字符强) 具体操做方法可查看API文档,这儿就不一一介绍。
后记:主要为了方便之后使用,本文若是有不正确之处请多多指教。java