面試題:簡述一下將文件中的數據輸入到另一個文件中的步驟:
1.首先創建File 文件,並且和需要操作的文件向相關聯;
2.判斷文件是否存在用exists()方法,如果不存在則創建文件
3.如果是文本文件可以利用FileReader和FileWriter方法進行讀寫操作,如果出現亂碼可以使用其父類指定編碼
4.通過FileReader讀取數據時候可以使用緩衝流進行處理,提高效率,創建一個BufferedReader對象
5.創建FileWriter,同上使用緩存
下面是通過字節流和字符流兩種方法處理文件的過程:
package com.io;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class FileInputStreamDemo {
public static void main(String[] args) {
// readByByte();
// readByChar();
printJava();
}
//字節方式讀取文件
static void readByByte() {
//創建文件輸入流,和輸出流對象
FileInputStream fi =null;
FileOutputStream fo=null;
try {
//實例化輸入流,並傳入輸入流文件地址(兩種方法)
fi=new FileInputStream(new File("C:\\Users\\Administrator\\Desktop\\from.txt"));
// fi=new FileInputStream("C:\\Users\\Administrator\\Desktop\\from.txt");
//實例化輸出流,並傳入輸出流地址
fo=new FileOutputStream("C:\\Users\\Administrator\\Desktop\\to.txt");
// 創建中轉站數組,存放每次傳輸的內容
byte[] buf=new byte[1024];
//循環讀取文件內容
int len=-1;//當文件讀取完畢時返回-1
// fi.read(buf);//當buf足夠大時候,可以不用循環
// fo.write(buf);
while ((len=fi.read(buf)) !=-1) {
//輸出流寫入內容,這裏相當於向文件中寫入信息
fo.write(buf);
// fo.write(buf, 0, len);
}
// 讀完刷新輸出流,作用強制清空緩衝區
fo.flush();
System.out.println("文件複製完畢");
} catch (Exception e) {
// TODO: handle exception
}finally {
try {
//關閉流
fo.close();
fi.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//字符方式讀取文件
static void readByChar() {
//創建文件輸入流,和輸出流對象
FileReader fr=null;
FileWriter fw=null;
try {
//實例化輸入流,並傳入輸入流文件地址(兩種方法)
fr=new FileReader(new File("C:\\Users\\Administrator\\Desktop\\from.txt"));
// fr=new FileInputStream("C:\\Users\\Administrator\\Desktop\\from.txt");
//實例化輸出流,並傳入輸出流地址
fw=new FileWriter("C:\\Users\\Administrator\\Desktop\\to.txt");
// 創建中轉站數組,存放每次傳輸的內容
char[] buf=new char[1024];
//循環讀取文件內容
int len=-1;//當文件讀取完畢時返回-1
fr.read(buf);
fw.write(buf);
while ((len=fr.read(buf)) !=-1) {
//輸出流寫入內容,這裏相當於向文件中寫入信息
fw.write(buf);//默認從0開始,與下邊的一樣
// fo.write(buf, 0, len);
}
// 讀完刷新輸出流,作用強制清空緩衝區
fw.flush();
System.out.println("文件複製完畢");
} catch (Exception e) {
// TODO: handle exception
}finally {
try {
//關閉流
fw.close();
fr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
static void printJava() {
//創建文件輸入流
FileInputStream fi =null;
try {
//實例化輸入流,並傳入輸入流文件地址(兩種方法)
fi=new FileInputStream(new File("C:\\Users\\Administrator\\Desktop\\Bank.java"));
// fi=new FileInputStream("C:\\Users\\Administrator\\Desktop\\from.txt");
// 創建中轉站數組,存放每次傳輸的內容
byte[] buf=new byte[10];
//循環讀取文件內容
int len=-1;//當文件讀取完畢時返回-1
while ((len=fi.read(buf)) !=-1) {
System.out.print(new String(buf));
}
System.out.println("打印完畢");
} catch (Exception e) {
// TODO: handle exception
}finally {
try {
//關閉流
fi.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//類結束
}
這裏對字節流和字符流方法進行了封裝,還有一個控制檯打印的方法,通過觀察可以發現二者之間的不同。
各位學友有什麼不同觀點的可以評論,大家一起學習!