JAVA中的IO流封裝資料傳輸以及通訊
近些天學得JAVA中的IO流,對通訊有了很深的理解,分享一個DEMO建立檔案以及往檔案以特定格式寫入或讀取資訊!
直接上Demo
package IOcontrolCeshi;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.util.Scanner;public class ZijieLiuToZifuLiu {
/**
* 輸入輸出流中的位元組流轉化成字元流
* 使用方法 InputStreamReader 與 OutputStreamWriter
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//建立一個檔案作為儲存和讀取的載體
File file = new File("ByteToChar.txt"); //使用相對路徑預設路徑
if (!file.exists()) {
try {
System.out.println("開始建立檔案ByteToChar.txt");
file.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (file.exists()) {
System.out.println("檔案建立成功!");
}
}else {
System.out.println("檔案已經存在!");
}
System.out.println("檔案的路徑為"+file.getAbsolutePath());
//從控制檯輸入數字選擇兩個功能: 1.寫入檔案 2.讀取檔案
System.out.println("請輸入你要操作的序號: 1.寫入檔案 2.讀取檔案");
Scanner scanner = new Scanner(System.in);
int choice = scanner.nextInt();
switch (choice) {
//用檔案輸出流寫入資訊資料 用OutputStreamWriter將輸出位元組流轉換成輸出字元流,並使用方法指定格式:GBK UTF-8 gb2312 等格式
case 1://使用輸出流寫入檔案
//宣告需要用到的幾個輸出流
FileOutputStream fileOutputStream = null;
BufferedOutputStream bufferedOutputStream = null;
OutputStreamWriter outputStreamWriter = null;
BufferedWriter bufferedWriter = null;
try {
fileOutputStream = new FileOutputStream(file);
bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
//輸出快取位元組流 轉化成 輸出快取字元流
try {
outputStreamWriter = new OutputStreamWriter(bufferedOutputStream, "GBK");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
bufferedWriter = new BufferedWriter(outputStreamWriter);
System.out.println("請輸入你要錄入的資訊:");
String inString = scanner.next();
try {
bufferedWriter.write(inString);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("錄入資訊成功!");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//最後宣告的流最先關閉 依次關閉所有的流
if (bufferedWriter!=null) {
try {
bufferedWriter.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (outputStreamWriter!=null) {
try {
outputStreamWriter.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (bufferedOutputStream!=null) {
try {
bufferedOutputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (fileOutputStream!=null) {
try {
fileOutputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
}
break;
//用檔案輸入流讀取資訊資料 用InputStreamReader將輸入位元組流轉換成輸入字元流,並使用方法指定格式:GBK UTF-8 gb2312 等格式 進行讀取
case 2://讀取檔案
//宣告幾個要用的輸入流
FileInputStream fileInputStream = null;
BufferedInputStream bufferedInputStream = null;
InputStreamReader inputStreamReader = null;
BufferedReader bufferedReader = null;
System.out.println("開始讀取檔案<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");
try {
fileInputStream = new FileInputStream(file);
bufferedInputStream = new BufferedInputStream(fileInputStream);
//使用InputStreamReader 方法 將輸入位元組流 轉換成 輸入字元流
try {
inputStreamReader = new InputStreamReader(bufferedInputStream, "UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
bufferedReader = new BufferedReader(inputStreamReader);
char[] out = new char[1024];
int len = 0;
try {
while ((len = bufferedReader.read(out))!=-1) {
System.out.println("你要讀取的資訊為:"+new String(out, 0, len));
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//最後宣告的流最先關閉 依次關閉所有的流
if (bufferedReader!=null) {
try {
bufferedReader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (inputStreamReader!=null) {
try {
inputStreamReader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (bufferedInputStream!=null) {
try {
bufferedInputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (fileInputStream!=null) {
try {
fileInputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
}
break;
default:
System.out.println("你的輸入有誤,請重新輸入!");
break;
}
}
}