主要爲了演示文件輸入輸出流的簡單操作,在此之前要會文件的簡單操作。所以,主要分三部分講:文件操作、文件輸入流、文件輸出流。
注:對於這些類,很多方法不記得要學會查看api。
File
只寫了幾種簡單的操作,具體看代碼,註釋講解。
package File;
import java.io.File; //File類需要引用
public class TestFile {
public static void main(String[] args) {
// TODO Auto-generated method stub
File f =new File("D:\\文學社的舊文件\\我的稿子");
File[] files= f.listFiles(); //獲取路徑下的所有文件和文件夾
for(File file:files) {
System.out.println("文件名:"+file.getName()); //獲取文件名稱
System.out.println("文件路徑:"+file.getPath()); //獲取文件路徑
if(file.isDirectory()) { //判斷是否爲文件夾
System.out.println("這是一個文件夾!");
}
System.out.println(); //爲了結果顯示更清晰,空格隔開每個文件的信息
}
}
}
顯示結果:
簡單總結一下我代碼中用到的方法:
- File f =new File("D:\\文學社的舊文件\\我的稿子"); 構造方法,參數爲文件路徑;
- File[] files= f.listFiles() 獲得路徑下的文件及文件夾;
- file.getName() 獲得文件名稱
- file.getPath() 獲得文件路徑
- isDirectory() 判斷是否爲目錄
FileInputStream
文件輸入流,可用來讀取文件中的內容。
先看代碼和註釋:
package File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class TestFileInputStream_FileOutStream {
public static void main(String[] args) {
// TODO Auto-generated method stub
//演示文件輸入部分
FileInputStream fis =null; //定義一個文件輸入流
try {
//初始化得到文件路徑
fis=new FileInputStream("C:\\Users\\123\\Desktop\\test.txt");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
int i =0; //接收讀入的字節
try {
i=fis.read(); //一個字節一個字節地讀取文件內容
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
while(i!=-1) {
System.out.print((char)i); //將讀入的字節轉換爲字符打印到控制檯
try {
i=fis.read(); //然後繼續讀下一個字節
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//操作完了之後,要記得關閉文件輸入流
try {
fis.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
注意事項:
- read()方法是讀取一個字節,所以不可以準確讀取漢字,一個漢字需要兩個字節來表示;
- 對文件流操作結束之後要記得關閉文件流。
FileOutputStream
文件輸出流,用來向文件中寫入內容。看代碼:
package File;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class TestFileInputStream_FileOutStream {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 演示輸出部分(兩種)
//定義需要寫入文件的字符串
String s = "I am learning how to write data in files by using IO Stream! ";
FileOutputStream fos = null;
FileOutputStream fos1 = null;
File f = new File("C:\\Users\\123\\Desktop\\f.txt");
File f1 = new File("C:\\Users\\123\\Desktop\\f1.txt");
// 檢查文件是否存在,不存在時創建文件
if (!f.exists()) {
// f.mkdirs(); //生成文件夾
try {
f.createNewFile();// 生成文件
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (!f1.exists()) {
// f1.mkdirs(); //生成文件夾
try {
f1.createNewFile(); // 生成文件
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 初始化輸出流變量
try {
fos = new FileOutputStream(f);
fos1 = new FileOutputStream(f1);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
byte[] b = s.getBytes(); // 把要輸出的內容轉換爲byte數組
try {
// 用文件輸出流的寫方法來往文件中寫東西
fos.write(b);
fos1.write(b, 0, b.length / 2); // 使用寫方法的重載方法之寫入部分字符串(第二個參數是寫入的起始位置,第三個參數是寫如的長度)
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
// 操作完成之後記得關閉文件流
try {
fos.close();
fos1.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
演示了兩種寫入方法:
好了,差不多就這些。使用的時候,結合着api會容易些。
晚安。