(三十七)、字符流与转换流

字符流

字符输入流

Reader

Demo:

public class ReaderDemo {
    public static void main(String[] args) {
        FileReader reader = null;
        FileWriter writer = null;
        try {
            reader = new FileReader("c:/a.txt");
            char[] buf = new char[16];
            int len = -1;
            while ((len = reader.read(buf)) != -1) {
                System.out.print(new String(buf, 0, len));
            }
            writer = new FileWriter("c:/a.txt");
            writer.write("你好");
            writer.write(98);
            writer.flush();
            writer.write(new char[] { '啊', '你', '好' });
            writer.flush();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                reader.close();
                writer.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

字符输出流

Write

public class CopyString {
    public static void main(String[] args) {
        File file = new File("src/com/rair/CopyString.java");
        File desDir = new File("c:/");
        copyFile(file, desDir);
    }

    private static void copyFile(File file, File desDir) {
        FileReader reader = null;
        FileWriter writer = null;

        try {
            reader = new FileReader(file);
            writer = new FileWriter(new File(desDir, file.getName()));
            char[] buf = new char[4096];
            int len = -1;
            while ((len = reader.read(buf)) != -1) {
                String msg = new String(buf, 0, len);
                msg = msg.replaceAll("\\d", "").toUpperCase();// 去掉数字转成大写
                writer.write(msg);
                writer.flush();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                reader.close();
                writer.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

转换流

InputStreamReader

InputStreamReader有两个主要的构造函数:

InputStreamReader(InputStream in)
// 用默认字符集创建一个InputStreamReader对象
InputStreamReader(InputStream in,String CharsetName)
// 接受已指定字符集名的字符串,并用该字符集创建对象

Main.java

public class Main {
    public static void main(String[] args) throws Exception {
        FileInputStream fis = new FileInputStream("c:/a.txt");
        InputStreamReader reader = new InputStreamReader(fis, "gbk");
        BufferedReader br = new BufferedReader(reader);
        String line = br.readLine();
        System.out.println(line);
        // 编码
        byte[] bytes = line.getBytes("gbk");
        // 解码
        String string = new String(bytes, "utf-8");
        System.out.println(string);
    }
}

OutputStreamWrite

OutputStreamWriter也有对应的两个主要的构造函数:

OutputStreamWriter(OutputStream in)
// 用默认字符集创建一个OutputStreamWriter对象
OutputStreamWriter(OutputStream in,String CharsetNarme)

Demo.java

 public class Demo {
    public static void main(String[] args) throws IOException {
        BufferedWriter bfw = new BufferedWriter(new OutputStreamWriter(
                new FileOutputStream("c:/a.txt"), "utf-8"));
        bfw.write("字符转字节");
        bfw.flush();
        bfw.close();
    }
}

从键盘读取数据,类似Scanner

public class SystemInDemo {
    public static void main(String[] args) throws IOException {

        BufferedReader reader = new BufferedReader(new InputStreamReader(
                System.in, "utf-8"));
        BufferedWriter writer = new BufferedWriter(new FileWriter(new File(
                "c:/a.txt"), true));
        String line = "";
        System.out.println("请输入:");
        while ((line = reader.readLine()) != null) {
            if (line.equals("q")) {
                break;
            }
            // 只写整型数字
            if (line.matches("\\d+")) {
                writer.write(line);
                writer.newLine();
                writer.flush();
            } else {
                System.out.println("请输入数字");
            }

        }
        reader.close();
        writer.close();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值