輸入流的面試問題?

面試題:簡述一下將文件中的數據輸入到另一個文件中的步驟:

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();
}
}

}
//類結束
}

這裏對字節流和字符流方法進行了封裝,還有一個控制檯打印的方法,通過觀察可以發現二者之間的不同。

                                   各位學友有什麼不同觀點的可以評論,大家一起學習!

發佈了45 篇原創文章 · 獲贊 7 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章