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