通過JAVA——IO流 篇五的規律分析以下實例。
-
複製一個文本文件 1. 明確目的和源: 源: Reader InputStream 目的: Writer OutputStream 2. 明確數量是否爲純文本(分析:文本文件是純文本): 源:Reader 目的:Writer 3. 明確具體的設備(分析:文本文件都保存到了硬盤上): 源設備:硬盤——File 則可通過FileReader對象操作源 目的設備:硬盤——File 則可通過FileWriter對象操作目的 4. 是否需要其他額外功能(分析:想用上緩衝區Buffer) 對於源可使用字符輸入緩衝區:BufferedReader 對於目的使用字符輸出緩衝區:BufferWriter
/**
* 複製文件
* @param sourcePath 源文件路徑
* @param aimPath 目的文件路徑
*/
public static void copyFile(String sourcePath, String aimPath )
{
//創建字符輸入緩衝區對象
BufferedReader bufferedReader = null;
//創建字符輸出流緩衝區對象
BufferedWriter bufferedWriter = null;
try {
//創建字符輸入流對象
FileReader fileReader = new FileReader(sourcePath);
bufferedReader = new BufferedReader(fileReader);
//創建字符輸出流對象
FileWriter fileWriter = new FileWriter(aimPath);
bufferedWriter = new BufferedWriter(fileWriter);
int readSize = 0;
char[] buff = new char[1024];
//將字符輸入緩衝區的數據寫入
while ((readSize = bufferedReader.read(buff)) != -1) {
bufferedWriter.write(buff, 0, readSize);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
if(bufferedReader != null)
{
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(bufferedWriter != null)
{
try {
bufferedWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
-
讀取鍵盤錄入信息,並寫入到一個文件中。 1.明確源和目的 源: Reader InputStream 目的:Writer OutputStream 2.明確數據是否爲純文本(分析:輸入鍵盤錄入是字節流但是也是純文本數據 輸出文本文件是純文本文件) 源:Reader 目的: Writer 3.明確具體設備 源設備:鍵盤 System.in 則可獲取到字節輸入流 目的設備:硬盤File 則可通過FileWriter對象操作目的 4.是否需要額外功能 需要轉換:將鍵盤錄入的字節流進行轉換成字符流, InputStreamReader(從字節流到字符流的橋 ) 需要高效:用上緩衝區Buffer(BufferRead BufferWriter)
/**
* 讀取鍵盤錄入信息,並寫入到一個文件中
* @param aimPath 文件路徑
*/
public static void keyToFile(String aimPath)
{
//創建字符輸出流緩衝區
BufferedWriter bufferedWriter = null;
try {
//創建將字節流轉換成字符流的對象(輸入流)
InputStreamReader inputStreamReader = new InputStreamReader(System.in);
//創建字符輸入流緩衝區
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
//創建字符輸出流對象
FileWriter writer = new FileWriter(aimPath);
bufferedWriter = new BufferedWriter(writer);
String readbuf = null;
while ((readbuf = bufferedReader.readLine()) != null) {
bufferedWriter.write(readbuf);
bufferedWriter.newLine();
bufferedWriter.flush();
if (readbuf.equals("OVER")) {
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}finally {
if(bufferedWriter != null)
{
try {
bufferedWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
-
將一個文件文件數據顯示在控制檯上 1. 明確源和目的 源: Reader InputStream 目的:Writer OutputStream 2. 文件是否爲純文本文件 源:Reader 目的:Writer 3. 明確設備 源:硬盤File FileReader 目的:控制檯 System.out 4. 是否需要額外功能 需要轉換: System.out是字節流需要轉換成字符流 需要高效: 添加緩衝區(Buffer) BufferedReader BufferedWriter
/**
* 將一個文件文件數據顯示在控制檯上
* @param sourcePath 文件路徑
* @throws Exception
*/
public static void fileToConsole(String sourcePath)
{
BufferedReader bufferedReader = null;
try {
FileReader fileReader = new FileReader(sourcePath);
bufferedReader = new BufferedReader(fileReader);
OutputStreamWriter out = new OutputStreamWriter(System.out);
BufferedWriter bufferedWriter = new BufferedWriter(out);
char[] cbuf = new char[1024];
int len = 0;
while ((len = bufferedReader.read(cbuf)) != -1) {
bufferedWriter.write(cbuf, 0, len);
bufferedWriter.flush();
}
} catch (Exception e) {
e.printStackTrace();
}finally {
if(bufferedReader != null)
{
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
-
讀取鍵盤錄入的數據,顯示在控制檯上。 1. 明確源和目的 源: Reader InputStream 目的:Writer OutputStream 2. 是否爲純文本文件 源:Reader 目的:Writer 3. 明確設備 源:System.in 目的:System.out 4. 是否需要額外功能 需要轉換 需要高效
/**
* 讀取鍵盤錄入的數據,顯示在控制檯上。
*/
public static void consoleToConsole()
{
InputStreamReader inputStreamReader = new InputStreamReader(System.in);
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(System.out);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);
String line = null;
try {
while ((line = bufferedReader.readLine()) != null) {
bufferedWriter.write(line);
bufferedWriter.newLine();
bufferedWriter.flush();
if ("OVER".equals(line)) {
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}