java io字符输出流_JAVA IO 字符输入流与输出流总结说明
目錄
OutputStreamWriter 用于向本地文件中寫入數(shù)據(jù)
InputStreamReader 用于讀取本地文件中的字節(jié)數(shù)據(jù)
FileReader 用于讀取本地文件中的字節(jié)數(shù)據(jù)
FileWriter 用于向本地文件中寫入數(shù)據(jù)
BufferedReader 實(shí)現(xiàn)按行讀取文件 & BufferedWriter 實(shí)現(xiàn)按行寫入文件
PrintWriter 實(shí)現(xiàn)按行寫入文件
封裝一個(gè)自己用的文件讀取寫入方法類
1 OutputStreamWriter 寫入示例
// 實(shí)例化一個(gè)文件對(duì)象
String fileSrc = "/Users/hlc/www/test/t11.txt";
File file = new File(fileSrc);
//打開(kāi)FileOutputStream文件字節(jié)輸出流
FileOutputStream out = new FileOutputStream(file);
//打開(kāi)OutputStreamWriter文件字符輸出流,并設(shè)置文件字符編碼
OutputStreamWriter osw = new OutputStreamWriter(out,"utf-8");
//調(diào)用write方法,寫入數(shù)據(jù)
osw.write("寫上幾個(gè)字");
//刷新緩沖區(qū)數(shù)據(jù)
osw.flush();
//關(guān)閉輸出流
osw.close();
out.close();
以上.
2 InputStreamReader讀取示例
// 實(shí)例化一個(gè)文件對(duì)象
String fileSrc = "/Users/hlc/www/test/t11.txt";
File file = new File(fileSrc);
//打開(kāi)FileInputStream 文件字節(jié)輸入流
FileInputStream in = new FileInputStream(file);
//打開(kāi)InputStreamReader 字符輸入流,并設(shè)置編碼方式
InputStreamReader isr = new InputStreamReader(in,"utf-8");
//獲取文件大小
int len = (int) file.length();
//創(chuàng)建一個(gè)char數(shù)組,用于存放讀取的字符
char[] buffer = new char[len];
//將文件內(nèi)容讀取到上一步創(chuàng)建好的char[] buffer中
isr.read(buffer,0,buffer.length);
//將buffer轉(zhuǎn)換為字符串,并打印
String s = new String(buffer);
System.out.print(s);
以上,你可能感覺(jué)很麻煩,需要先實(shí)例出一個(gè)字節(jié)流,在實(shí)例出一個(gè)字符流, 我們可以使用FileWriter 和 FileReader 的方式來(lái)替代上述步驟
3 FileWriter寫入方法演示
String fileSrc = "/Users/hlc/www/test/demo1.php";
File file = new File(fileSrc);
FileWriter fw = new FileWriter(file);
fw.write("FileWrite");
fw.flush();
fw.close();
4 FileReader讀取方法演示
String fileSrc = "/Users/hlc/www/test/demo1.php";
File file = new File(fileSrc);
FileReader fr = new FileReader(file);
int len = (int) file.length();
char[] buffer = new char[len];
fr.read(buffer,0,len);
String s = new String(buffer);
System.out.print(s);
fr.close();
FileWriter 和 FileReader的缺陷是不能設(shè)定字符編碼,默認(rèn)為項(xiàng)目的字符編碼
5 BufferedReader & BufferedWriter
如果需要按行讀取與寫入的話,可以使用BufferedReader與BufferedWriter
使用方法如下
// 實(shí)例化一個(gè)BufferedReader
// BufferedReader需要字符輸入流做參數(shù)進(jìn)行構(gòu)造,而字符出入流需要文件字節(jié)輸入流做參數(shù)進(jìn)行構(gòu)造,所以寫成以下嵌套模式
BufferedReader br = new BufferedReader(
new InputStreamReader(
new FileInputStream("/Users/hlc/www/test/demo1.php")));
//實(shí)例化一個(gè)BufferedWriter
BufferedWriter bw = new BufferedWriter(
new OutputStreamWriter(
new FileOutputStream("/Users/hlc/www/test/demo2.php")));
//定義一個(gè)line字符串,存放讀取的行
String line ;
int i = 1;
// br.readLine() 每次讀取一行, 讀到null 結(jié)束讀取
while((line = br.readLine())!=null){
System.out.println("行號(hào):"+i+" "+line);
//寫入一行數(shù)據(jù)
bw.write("行號(hào):"+i+" "+line);
//寫入換行
bw.newLine();
//緩沖刷新
bw.flush();
i++;
}
//關(guān)閉流
br.close();
bw.close();
6 上例 BufferedWriter 實(shí)例化的時(shí)候很繁瑣,可以使用PrintWriter 替代
簡(jiǎn)單例子
//實(shí)例化
PrintWriter pw = new PrintWriter("/Users/hlc/www/test/demo2.php");
//寫入一行數(shù)據(jù)
pw.println(line);
pw.flush();
修改上例
BufferedReader br = new BufferedReader(
new InputStreamReader(
new FileInputStream("/Users/hlc/www/test/demo1.php")));
PrintWriter pw = new PrintWriter("/Users/hlc/www/test/demo2.php");
String line ;
int i = 1;
while((line = br.readLine())!=null){
System.out.println("行號(hào):"+i+" "+line);
pw.println(line);
pw.flush();
i++;
}
br.close();
pw.close();
7 最后 封裝一個(gè)個(gè)人用的io類
package com.demo;
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;
/**
* 文件寫入與讀取的類
* @author hlc
*
*/
public class HuuIOUtils {
/** 編碼方式 */
public static String code = "utf-8";
/**
* 從文件中讀取文件內(nèi)容
* @param String filePath 文件路徑
* @return String fileContent 文件內(nèi)容
* @throws IOException
*/
public static String fileGetContents(String filePath) throws IOException{
// 實(shí)例化一個(gè)文件對(duì)象
String fileSrc = filePath;
File file = new File(fileSrc);
//打開(kāi)FileInputStream 文件字節(jié)輸入流
FileInputStream in = new FileInputStream(file);
//打開(kāi)InputStreamReader 字符輸入流,并設(shè)置編碼方式
InputStreamReader isr = new InputStreamReader(in,code);
//獲取文件大小
int len = (int) file.length();
//創(chuàng)建一個(gè)char數(shù)組,用于存放讀取的字符
char[] buffer = new char[len];
//將文件內(nèi)容讀取到上一步創(chuàng)建好的char[] buffer中
isr.read(buffer,0,buffer.length);
//將buffer轉(zhuǎn)換為字符串
String fileContent = new String(buffer);
return fileContent;
}
/**
* 向文件中寫入字符串
* @param filePath 文件路徑
* @param data 需要寫入的內(nèi)容
* @param append 是否需要追加寫入
* @throws IOException
*/
public static void filePutContents(String filePath,String data,Boolean append) throws IOException{
// 實(shí)例化一個(gè)文件對(duì)象
String fileSrc = filePath;
File file = new File(fileSrc);
FileOutputStream out = null;
//打開(kāi)FileOutputStream文件字節(jié)輸出流
if(append == true){
out = new FileOutputStream(file,true);
}else{
out = new FileOutputStream(file);
}
//打開(kāi)OutputStreamWriter文件字符輸出流,并設(shè)置文件字符編碼
OutputStreamWriter osw = new OutputStreamWriter(out,code);
//調(diào)用write方法,寫入數(shù)據(jù)
osw.write(data);
//刷新緩沖區(qū)數(shù)據(jù)
osw.flush();
//關(guān)閉輸出流
osw.close();
out.close();
}
}
使用
public static void main(String[] args) {
String filename = "demo/test.txt";
String content = "測(cè)試寫入123ABC";
try {
HuuIOUtils.filePutContents(filename,content,true);
String res = HuuIOUtils.fileGetContents(filename);
System.out.println(res);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
總結(jié)
以上是生活随笔為你收集整理的java io字符输出流_JAVA IO 字符输入流与输出流总结说明的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java 微信 菜单_java微信开发A
- 下一篇: java groovyshell_在ja