继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

JAVA IO 字符输入流与输出流总结说明

hlc157248yx
关注TA
已关注
手记 3
粉丝 6
获赞 60
目录
  1. OutputStreamWriter 用于向本地文件中写入数据
  2. InputStreamReader 用于读取本地文件中的字节数据
  3. FileReader 用于读取本地文件中的字节数据
  4. FileWriter 用于向本地文件中写入数据
  5. BufferedReader 实现按行读取文件 & BufferedWriter 实现按行写入文件
  6. PrintWriter 实现按行写入文件
  7. 封装一个自己用的文件读取写入方法类

1 OutputStreamWriter 写入示例

// 实例化一个文件对象
String fileSrc =  "/Users/hlc/www/test/t11.txt";
File  file  = new File(fileSrc);

//打开FileOutputStream文件字节输出流
FileOutputStream out = new FileOutputStream(file);

//打开OutputStreamWriter文件字符输出流,并设置文件字符编码
OutputStreamWriter osw = new OutputStreamWriter(out,"utf-8");

//调用write方法,写入数据
osw.write("写上几个字");
//刷新缓冲区数据
osw.flush();

//关闭输出流
osw.close();
out.close();

以上.

2 InputStreamReader读取示例

// 实例化一个文件对象
String fileSrc =  "/Users/hlc/www/test/t11.txt";
File  file  = new File(fileSrc);

//打开FileInputStream 文件字节输入流
FileInputStream in = new FileInputStream(file);

//打开InputStreamReader 字符输入流,并设置编码方式
InputStreamReader isr = new InputStreamReader(in,"utf-8"); 

//获取文件大小
int len = (int) file.length();  
//创建一个char数组,用于存放读取的字符
char[] buffer = new char[len];

//将文件内容读取到上一步创建好的char[] buffer中
isr.read(buffer,0,buffer.length);

//将buffer转换为字符串,并打印
String s = new String(buffer);
System.out.print(s);

以上,你可能感觉很麻烦,需要先实例出一个字节流,在实例出一个字符流, 我们可以使用FileWriter 和 FileReader 的方式来替代上述步骤

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的缺陷是不能设定字符编码,默认为项目的字符编码

5 BufferedReader & BufferedWriter

如果需要按行读取与写入的话,可以使用BufferedReader与BufferedWriter

使用方法如下

// 实例化一个BufferedReader
// BufferedReader需要字符输入流做参数进行构造,而字符出入流需要文件字节输入流做参数进行构造,所以写成以下嵌套模式

BufferedReader br = new BufferedReader(
        new InputStreamReader(
                new FileInputStream("/Users/hlc/www/test/demo1.php")));

//实例化一个BufferedWriter
BufferedWriter bw = new BufferedWriter(
        new OutputStreamWriter(
                new FileOutputStream("/Users/hlc/www/test/demo2.php")));

//定义一个line字符串,存放读取的行
String line ;
int i = 1;
// br.readLine() 每次读取一行, 读到null 结束读取
while((line = br.readLine())!=null){

    System.out.println("行号:"+i+"    "+line); 

    //写入一行数据
    bw.write("行号:"+i+"  "+line);
    //写入换行
    bw.newLine(); 
    //缓冲刷新
    bw.flush();
     i++;
}
//关闭流
br.close();
bw.close();

6 上例 BufferedWriter 实例化的时候很繁琐,可以使用PrintWriter 替代

简单例子

//实例化
PrintWriter pw = new PrintWriter("/Users/hlc/www/test/demo2.php");

//写入一行数据
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("行号:"+i+"    "+line); 

    pw.println(line);
    pw.flush();
     i++;
}
br.close();
pw.close();

7 最后 封装一个个人用的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";

    /**
     * 从文件中读取文件内容
     * @param String filePath 文件路径
     * @return String fileContent 文件内容
     * @throws IOException
     */
    public static String fileGetContents(String filePath) throws IOException{
        // 实例化一个文件对象
        String fileSrc =  filePath;
        File  file  = new File(fileSrc);

        //打开FileInputStream 文件字节输入流
        FileInputStream in = new FileInputStream(file);

        //打开InputStreamReader 字符输入流,并设置编码方式
        InputStreamReader isr = new InputStreamReader(in,code); 

        //获取文件大小
        int len = (int) file.length();  

        //创建一个char数组,用于存放读取的字符
        char[] buffer = new char[len];

        //将文件内容读取到上一步创建好的char[] buffer中
        isr.read(buffer,0,buffer.length);

        //将buffer转换为字符串 
        String fileContent = new String(buffer);

        return fileContent;
    }
    /**
     * 向文件中写入字符串
     * @param filePath 文件路径
     * @param data 需要写入的内容
     * @param append 是否需要追加写入
     * @throws IOException
     */
    public static void filePutContents(String filePath,String data,Boolean append) throws IOException{

        // 实例化一个文件对象
        String fileSrc =  filePath;
        File  file  = new File(fileSrc);
        FileOutputStream out = null;

        //打开FileOutputStream文件字节输出流
        if(append == true){
             out = new FileOutputStream(file,true);
        }else{
             out = new FileOutputStream(file);
        }

        //打开OutputStreamWriter文件字符输出流,并设置文件字符编码
        OutputStreamWriter osw = new OutputStreamWriter(out,code);

        //调用write方法,写入数据
        osw.write(data);

        //刷新缓冲区数据
        osw.flush();

        //关闭输出流
        osw.close();
        out.close();

    }

}

使用


    public static void main(String[] args) {
        String filename = "demo/test.txt";
        String content = "测试写入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();
        }

    }
打开App,阅读手记
2人推荐
发表评论
随时随地看视频慕课网APP