字符流

字节流服务文本文件时,可能出现中文乱码。因为一个中文字符可能占用多个字节。

针对于非英语系的国家和地区,提供了一套方便读写方式——字符流。

java.io.Reader

java.io.Writer

文件字符流

|-读文件:FileReader

  1. java.io.FileReader fr = new FileReader("待读取的文件");// 构造时使用默认的字符编码
  2. int 读取单个字符 = fr.read();
  3. char[] cbuf = new char[1024];
  4. int 读取到字符数组中 = fr.read(cbuf);
  5. fr.close();

|-写文件: FileWriter

  1. java.io.FileWriter fw = new FileWriter("要写的文件");
  2. fw.write(71);// 写单个字符
  3. char[] cbuf = {};
  4. fw.write(cbuf);// 写字符数组
  5. fw.write("写字符串");
  6. fw.close();// 字符流和字节流不同,有内置缓冲区。如果不关闭,数据只是保存到缓冲区,未写入文件。
  7. fw.flush();// 可以使用flush可以把缓冲区中的数据强制刷入文件(最后还是应该close)

前面字节流的例子,可以改为字符流测试运行。参考代码:

  1. import java.io.*;
  2. public class 字符流 {
  3. public static void main(String[] args) throws IOException {
  4. read();
  5. write();
  6. }
  7. static final int C_CONDITION = 1;
  8. public static void read() {
  9. try {
  10. File file = new File("testRead.dat"); // 创建文件对象
  11. // 【1】创建输入流对象,相当于打开文件
  12. FileReader fr = new FileReader(file);
  13. if (C_CONDITION == 1) {
  14. // 【2】.read():读取单个
  15. for (int i = 0; i < file.length(); i++) {
  16. int read = fr.read();
  17. char ch = (char) read;
  18. System.out.print(ch);
  19. }
  20. System.out.println();
  21. } else {
  22. // 【2】.read(char[] b):
  23. long len = file.length();
  24. char[] buf = new char[(int) len];
  25. fr.read(buf);
  26. System.out.println(buf);
  27. }
  28. // 【3】关闭流
  29. fr.close();
  30. } catch (FileNotFoundException fnfe) {
  31. System.out.println("文件打开失败。");
  32. } catch (IOException ioe) {
  33. ioe.printStackTrace();
  34. }
  35. }
  36. static void write() {
  37. File file = new File("文件字节输出流.txt"); // 创建文件对象
  38. try {
  39. // (1)构造:通过文件对象创建文件输出流对象
  40. FileWriter fw = new FileWriter(file);
  41. // (2)写入文件
  42. // (2.1)write(int b)
  43. for (int i = 49; i < 97; i++) {
  44. fw.write(i);
  45. fw.write(' ');
  46. }
  47. // (2.2)write(char[] b)
  48. char[] buffer = "I Love Java,你呢?".toCharArray();
  49. fw.write(buffer);
  50. // (3)关闭流:如果不关闭,数据只是保存到缓冲区,并未保存到文件。可以使用flush把数据强制刷入文件。
  51. fw.flush();
  52. // fos.close();
  53. } catch (IOException e) {
  54. e.printStackTrace();
  55. }
  56. }
  57. }

Properties类

  1. package java.util;
  2. public class Properties extends Hashtable<Object,Object>

表示属性集。每个键及其对应值都是一个字符串。

该类应用广泛,比如获取系统属性:

  1. Properties props = System.getProperties();

使用方法:

  1. import java.io.*;
  2. import java.util.Properties;
  3. import java.util.Set;
  4. public class TestProperties {
  5. public static void main(String[] args) throws IOException {
  6. // Properties类extends Hashtable,其实就是个map
  7. Properties prop = new Properties();
  8. // setProperty:调用的put方法,但参数只允许字符串
  9. prop.setProperty("金箍棒", "一万三千五百斤");
  10. prop.setProperty("九齿钉耙", "五千零四十八斤");
  11. prop.setProperty("降妖宝杖", "五千零四十八斤");
  12. // stringPropertyNames:调用了keySet()方法
  13. Set<String> set = prop.stringPropertyNames();
  14. for (String key : set) {
  15. // getProperty:调用了get方法
  16. String value = prop.getProperty(key);
  17. System.out.println(key + ":" + value);
  18. }
  19. // ----------------------------------------------
  20. // .store存储键值对到文件
  21. FileWriter fw = new FileWriter("prop.txt");
  22. // 参数1:字符流(也有字节流的重载版本,不能写中文)
  23. // 参数2:注释,Unicode编码,不要写中文
  24. prop.store(fw, "save data");
  25. // 关闭流
  26. fw.close();
  27. // ----------------------------------------------
  28. // .load从文件读取键值对(k-v)
  29. prop = new Properties();
  30. FileReader fr = new FileReader("prop.txt");
  31. prop.load(fr);
  32. System.out.println(prop);
  33. fr.close();
  34. }
  35. }

Java基础教程——字符流的更多相关文章

  1. Java基础教程——转换流

    转换流 通常,Window默认的编码方式是GBK,Java项目一般建议设为UTF-8编码.这时候读取文件可能出现乱码.事实上实际应用中编码格式不匹配的场景非常多. 转换流可以指定编码方式,用于解决乱码 ...

  2. Java基础教程——缓冲流

    缓冲流 "缓冲流"也叫"包装流",是对基本输入输出流的增强: 字节缓冲流: BufferedInputStream , BufferedOutputStream ...

  3. Java基础教程——打印流

    打印流 打印流可以把原本输出到控制台的信息输出到文件中.PrintStream是字节打印流(还有个对应的字符打印流是PrintWriter,这里不涉及) System类中有个变量: public fi ...

  4. java基础之IO流(二)之字符流

    java基础之IO流(二)之字符流 字符流,顾名思义,它是以字符为数据处理单元的流对象,那么字符流和字节流之间的关系又是如何呢? 字符流可以理解为是字节流+字符编码集额一种封装与抽象,专门设计用来读写 ...

  5. Java基础:IO流之字节流和字符流

    1. 流的概念 流(stream)的概念源于UNIX中管道(pipe)的概念.在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备.外部文件等. 一个流,必有源端和目的端 ...

  6. Java基础教程:面向对象编程[3]

    Java基础教程:面向对象编程[3] 内容大纲 基础编程 获取用户输入 java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入.我们可以查看Ja ...

  7. Java基础教程(25)--I/O

    一.I/O流   I/O流表示输入源或输出目标.流可以表示许多不同类型的源和目标,例如磁盘文件.设备.其他程序等.   流支持许多不同类型的数据,包括字节.原始数据类型.字符和对象等.有些流只传递数据 ...

  8. Java基础教程(5)--变量

    一.变量 1.变量的定义   正如上一篇教程<Java基础教程(4)--面向对象概念>中介绍的那样,对象将它的状态存在域中.但是你可能仍然有一些疑问,例如:命名一个域的规则和惯例是什么?除 ...

  9. Java基础教程:面向对象编程[2]

    Java基础教程:面向对象编程[2] 内容大纲 访问修饰符 四种访问修饰符 Java中,可以使用访问控制符来保护对类.变量.方法和构造方法的访问.Java 支持 4 种不同的访问权限. default ...

随机推荐

  1. ArcGIS API for Javascript的Point clustering使用及默认符号无法显示问题

    1.将包含ClusterFeatureLayer.js文件的extras文件夹放在部署的arcgis api目录下,如下图. extras路径 2.使用ClusterFeatureLayer关键代码如 ...

  2. eclipse之SSH配置struts2【一】 (使用版本 2.3.24.1)

    eclipse创建Dynamic web project,勾选生成web.xml,创建index.jsp页面,tomcat部署能正常运行.进行下一步struts配置. web.xml中添加配置,配置在 ...

  3. 【转】Loading PNGs with SDL_image

    FROM:http://lazyfoo.net/tutorials/SDL/06_extension_libraries_and_loading_other_image_formats/index2. ...

  4. Linux使用tmux

    Tmux功能: 提供了强劲的.易于使用的命令行界面.可横向和纵向分割窗口.窗格可以自由移动和调整大小,或直接利用四个预设布局之一.支持 UTF-8 编码及 256 色终端.可在多个缓冲区进行复制和粘贴 ...

  5. 【故障公告】访问高峰数据库服务器 CPU 100% 引发全站故障

    今天上午11:10,我们又中"奖"了,我们使用的阿里云 RDS 实例(SQL Server 2016 标准版,16核32G)突发出现 CPU 100%,引发全站故障,直到 12:1 ...

  6. Nginx四层转发vsftp

    1.需要安装stream模块2.在nginx.conf默认配置文件添加如下配置即可stream { log_format tcp '$remote_addr [$time_local] ' '$pro ...

  7. 白话科普系列——最好用的浏览器 Chrome,你用了么?

    市面上的浏览器多种多样,而浏览器的王者--IE 浏览器,它在 2002 年市场份额高达 95.4%.直到后续 Firefox,Safari,Chrome 相继问世才动摇了 IE 浏览器的地位,其中 C ...

  8. 为什么layui表单不显示?

    当你使用表单时,Layui会对select.checkbox.radio等原始元素隐藏,从而进行美化修饰处理.但这需要依赖于form组件,所以你必须加载 form,并且执行一个实例.值得注意的是:导航 ...

  9. QQ群web前端分析一——准备部分

    Vary:Accept-Encoding的用途 2012-09-06 11:47:08|  分类: rhel_apache|字号 订阅     查看网页的response header一般都有Vary ...

  10. waf 引擎云原生调研---扫盲

    概念: lstio Istio是一个用于服务治理的开放平台 Istio是一个Service Mesh形态的用于服务治理的开放平台 Istio是一个与Kubernetes紧密结合的适用于云原生场景的Se ...