1. IO是什麼意思? data source是什麼意思?
IO流就是以流的方式進行輸入輸出, 輸入輸出(IO)是指計算機同任何外部設備之間的數據傳遞
Data source提供原始數據的原始媒介,常見的有數據庫,文件,其他程序,內存,網絡連接,IO設備
2. 字節流和字符流有什麼區別?輸入流和輸出流有什麼區別?
字節流按照字節讀取數據,字符流按照字符讀取數據
輸入流:數據源到程序 輸出流:程序到目的地
3. 節點流和處理流有什麼區別?
節點流可以直接從數據源或目的地讀寫數據,處於io操作的第一線,所有操作必須通過他們進行;
處理流或叫包裝流,不直接連接到數據源和目的地,對其他流進行封裝,目的主要是簡化操作和提高性能。
4. word文檔能使用字符流操作嗎?爲什麼?
不能word存放數據是二進制,而字符流只能讀取文本
5. 【上機】完成老師課堂上讀入文件數據的代碼:
static void testReader(){ File f = new File("d:/a.txt"); FileInputStream fis = null; try { fis = new FileInputStream(f); int m = 0; while((m=fis.read())!=-1){ char c = (char) m; System.out.print(c); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ try { if(fis!=null){ fis.close(); } } catch (IOException e) { e.printStackTrace(); } } } import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream;
public class Test { public static void main(String[] args) { // 讀取一個分件 並輸出 // 聲明文件輸入流 InputStream is = null; try { is = new FileInputStream("d:/bjsxt.txt"); // 使用流 byte[] bs = new byte[1024]; int len = is.read(bs); while (len != -1) { // 輸出 System.out.println(new String(bs, 0, len)); // 重新讀取 len = is.read(bs); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { // 關閉流 try { if (is != null) { is.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } |
6. 解釋下面代碼的含義:
while((m=fis.read())!=-1){//輸入流讀取目標源將每個字節賦給m變量,並且判斷該字節是否爲-1當滿足時執行代碼塊裏邊代碼 char c = (char) m;//將該次讀取的字節強轉成字符型賦給c變量 System.out.print(c);//輸出該字節的字符表示 } |
7. 流對象使用完後,一般要調用close方法關閉,釋放資源。 這種做法對嗎?
對,流不使用的時候一定要close();因爲不僅是堆內存數據,還涉及和外存上文件的連接
8. 【上機】完成老師寫文件的操作:
static void testWrite(){ FileOutputStream fos = null; String str = "sffsdfsdfsdfsdfsdfsdfsdf"; try { fos = new FileOutputStream("d:/b.txt"); /*for(int i=0;i<str.length();i++){ fos.write(str.charAt(i)); }*/ fos.write(str.getBytes()); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ try { if(fos!=null){ fos.close(); } } catch (IOException e) { e.printStackTrace(); } } } |
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class Test {
public static void main(String[] args) {
// 將字符串寫到一個文件
// 聲明文件輸入流
OutputStream os = null;
try {
String str = "bjsxgwoainihaheihenalasayiersansiwuliuqibajiushi";
os = new FileOutputStream("d:/bjsxt1.txt");
// 使用流
byte[] bs = str.getBytes();
os.write(bs);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
// 關閉流
if (os != null) {
try {
os.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
9. InputStream和OutputStream基本特點是?
Java語言中最基本的兩個字節輸入輸出類,其他字節輸入輸出流類都繼承這兩個基本類,這兩個基類是抽象類不能實例只能用他們的子類
10. Reader和Writer的基本特點是?
Java語言中最基本的兩個字符輸入輸出類,其他字符輸入輸出流類都繼承這兩個基類,這兩個基類是抽象類不能實例,只能用他們的子類
11. FileInputStream和OutputStream的基本作用是?
分別是inputstream和outputstream的子類,fileinputstream是文件字節輸入流,他直接連接文件源來獲取字節數據然後放入目的地,fileoutputstream是字節輸出流負責將字節數據寫入目標文件中
12. FileReader和FileWriter的作用是?
分別是reader和writer的子類,filereader是文件字符輸入流,他直接連接文件源來獲取字符數據然後放入目的地,filewriter是字符輸出流負責將字符數據寫入目標文件中
13. 【上機】完成文件的copy代碼
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class Test {
public static void main(String[] args) {
// 完成文件的複製
// 創建字節輸入輸出流
OutputStream os = null;
InputStream is = null;
try {
is = new FileInputStream("d:/bjsxt.txt");
os = new FileOutputStream("d:/bjsxt1.txt");
// 使用兩個流
byte[] bs = new byte[1024];
int len = is.read(bs);
while (len != -1) {
// 寫入文件
os.write(bs, 0, len);
// 重新獲取
len = is.read(bs);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
// 關閉兩個流
try {
if (is != null) {
is.close();
}
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
if (os != null) {
os.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
14. BufferInputStream和BufferedOutputStream的特點是?
Bufferedinputstream和bufferedoutputstream是處理流,讀文件和寫文件都使用了緩衝區,減少讀寫次數從而提高效率,當創建這兩個緩衝流時,會創建內部緩衝數組,讀數據時數據按塊讀入緩衝區,其後的讀操作直接訪問緩衝區,當寫數據時首先寫入緩衝區當緩衝區滿時其中的數據寫入所連接的輸出流使用flush方法可以強制使緩衝區的數據全部寫入輸出流
15. 【上機】使用BufferedReader和BufferedWriter實現文本文件的拷貝。
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Reader;
import java.io.Writer;
public class Test {
public static void main(String[] args) throws IOException {
// 字符輸入輸出流完成文件的拷貝
// 聲明兩個流
Reader r = new FileReader("d:/bjsxt.txt");
Writer w = new FileWriter("d:/bjsxt1.txt");
// 使用兩個流
char[] cbuf = new char[1024];
int len = r.read(cbuf);
while (len != -1) {
// 寫入文件
w.write(cbuf, 0, len);
// 再次讀取
len = r.read(cbuf);
}
// 關閉兩個流
w.close();
r.close();
}
}