Java中有几种类型的流?

FileInputSream类
FileInputStream(String name)
FileInputStream(File file)
第一个构造方法是用给定的文件名name创建一个FileInputStream对象
第二个方法使用File对象创建FileInputStream对象使用文件输入流读取文件
例如
FileInputStream istream=new FileInputStream(“myfile.dat”);
或
File f=new File(“myfile.dat”);
FileInputStream istream =new FileInputStream(f);处理IO异常
Try{
FileInputStream istream=new FileInputStream(“myfile.dat”);
}
Catch(IOException e){}从输入流中读取字节
Int read();从输入流中顺序读取源中的单个字节数据,返回字节值(0~255之间的一个整数),如果到达源的末尾,则返回-1
Read方法还可以吧多个字节读入到字节数组中:
Int read(byte b[]);
Int read(byte b[],int off,int len);关闭流
使用close();FileOutputStream类
该类提供了基本的文件写入能力,除了从OutputStream类继承来的方法外,FileOutputStream类还提供了两个构造方法:FileOutputStream(String name)FileOutputStream(File file)
第一个构造方法,给指定的文件名name创建一个FileOutputStreak对象
第二个构造方法,使用File对象创建FileOutputStream对象
可以使用write()方法把字节写入到输出流到达目的地
Write的格式:Public void write(byte b[])  其功能就是把b.length个字节到输出流
Public void write(byte b[],int off,int len)给定字节数组中,偏移off处写入len个字节到输出流
FileOutputStream流顺序的写文件,只要不关闭流,每次调用write方法就顺序地向输出流写入内容,直到流被关闭。以上代码见hyh.io--File/Fileinputstream/Fileoutputsream以上输入输出流容易出现的问题就是:汉字乱码FileReader类和FileWriter类
与FileInputStream和FileOutputStream字节流相对应的是FileReader和FileWriter字符流,其分别是Reader和Writer的子类,构造方法如下:
FileReader(String filename)
FileWriter(String filename)
使用字节读取文件时,字节流不能直接操作Unicode字符,所以Java提供字符流。由于汉字在文件中占用了两个字节,如果使用字节流,读取不当会出现乱码现象,采用字符流就可以避免这个现象,因为在Unicode字符中,一个汉字被看做一个字符。
如果需要每次读取一行数据,FileReader类没有提供这样的方法,所以必须把这个流再接到另外一个流伤,从后面的流中读取一行数据。Java为其命名为BufferedReader类,构造方法:
BufferedReader(Reader in)
BufferedReader流能够读取文本行,方法是readLine()通过向BufferedReader传递一个Reader对象,来创建一个BufferedReader对象,
FileReader inone=new FileReader(“Student.txt”);
BufferedReader intwo=BufferedReader(inone);类似的可以将BufferedWriter流和FileWriter流连接在一起,然后使用BufferedWriter流将数据写到目的地,
FileWriter tofile=new FileWriter(”hello.txt”);
BufferedWriter out=BufferedWriter(tofile)
然后out使用BufferedReader类的方法:
Write(String s,int off,int len)把字符串s写入到文件中,off是s开始处的偏移量,len是写入的字符数量
代码详情见hyh.javaio.FileReaderandWriter代码总结:FileReader和FileWriter可以进行汉字的读取和写入BufferedReader有读取行的功能,readLine()RandomAccessFile类
RandomAccessFile类创建的流指向既可以作为源也可以作为目的地。换句话说,当想对一个文件进行读写操作时,可以创建一个指向该文件的RandomAccessFile流
构造方法:
RandomAccessFile(String name,String mode)参数name用来确定一个文件名,给出流的源。参数mode取r或者rw(只读或者读写),决定对文件的访问权限。
RandomAccessFile(File file,String mode)参数file是一个File对象,给出源,同时也是目的地。参数mode决定访问权限。
该类中有一个seek(long a)方法,用来定位RandomAccessFile流的读写位置。参数a确定读写位置距离文件开头的字节个数。
还可以调用getFilePointer()方法或者流当前的读写位置
类方法P280:
关闭文件
获取读写位置等。。。。。。。。使用RandomAccessFile流实现一个通讯录的录入与显示系统
见RandomAccessFile数据流P284
数组流P286
对象流P288
序列化与对象克隆P290
文件锁FileLockP293
Process类中的流P295
带进度条的输入流P298(学习笔记:教材为Java2实用教程第三版(耿祥义编著),因为使用了word进行整理,首字母大写忘记取消和一些代码在myeclipse上,但是不妨碍你查看)

from:http://zhidao.baidu.com/question/367239248129398724.html

Java的I/O类处理

Reader 类是 Java 的 I/O 中读字符的父类,而 InputStream 类是读字节的父类,InputStreamReader 类就是关联字节到字符的桥梁,它负责在 I/O 过程中处理读取字节到字符的转换,而具体字节到字符的解码实现它由 StreamDecoder 去实现,在 StreamDecoder 解码过程中必须由用户指定 Charset 编码格式。值得注意的是如果你没有指定 Charset,将使用本地环境中的默认字符集,例如在中文环境中将使用 GBK 编码。

Java的I/O类处理图

总结:Java读取数据流的时候,一定要指定数据流的编码方式,否则将使用本地环境中的默认字符集。

经过上述分析,修改之后的代码如下:

[java] view plaincopyprint?
  1. List<String> lines=new ArrayList<String>();
  2. BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(fileName),"UTF-8"));
  3. String line = null;
  4. while ((line = br.readLine()) != null) {
  5. lines.add(line);
  6. }
  7. br.close();

参考资料:

http://www.ibm.com/developerworks/cn/java/j-lo-chinesecoding/

http://hi.baidu.com/annleecn/blog/item/154770ed900738db2e2e2151.html

http://sd8089730.iteye.com/blog/1290895

http://www.360doc.com/content/07/0403/09/16749_427888.shtml

from:http://blog.csdn.net/greenqingqingws/article/details/7395213

Java读取文本文件中文乱码问题相关推荐

  1. Java读取配置文件中文乱码的问题

    首先,这里写一下我读取配置文件的方式.大家可以用以下方式读取配置文件: String fileName = "evaluation.properties";props = new ...

  2. Java 读取文件中文乱码处理 Java IO读取txt文件内容的正确姿势避免中文乱码

    在读取文件时,使用InputStreamReader 指定编码格式避免中文乱码 @Testpublic void txtTest() {File file = new File("D:\\i ...

  3. mysql 中文 java_Java 读取 MySQL 中文 乱码

    Java 读取 MySQL 中文 乱码 场景:Java,eclipse,读取MySQL数据库,MySQL编码为utf-8 问题:读出来的中文在eclipse的输出窗口中显示为乱码 错误的写法 1 Sy ...

  4. Java 读取文本文件

    文章目录 File FileReader InputStreamReader BufferedReader(解决方法在这里) 解决中文乱码 FileInputStream 我想用Java 读取文本文件 ...

  5. python读取中文文件乱码-详解Python的json文件读取及中文乱码显示问题解决方法...

    Python的json文件读取及解决中文乱码显示问题 本文实例讲述了Python实现的json文件读取及中文乱码显示问题解决方法.分享给大家供大家参考,具体如下: city.json文件的内容如下: ...

  6. SpringBoot使用@Value读取.properties中文乱码及解决方法

    问题重现 某不知名springboot小项目,application.properties文件: custom.param=中文属性值 java代码: @SpringBootApplication p ...

  7. python json.loads()中文问题-Python实现的json文件读取及中文乱码显示问题解决方法...

    本文实例讲述了Python实现的json文件读取及中文乱码显示问题解决方法.分享给大家供大家参考,具体如下: city.json文件的内容如下: { "cities": [ { & ...

  8. JAVA——读取文本文件的倒数第N行(模拟Linux中tail命令)

    解决方案 1.引入jar包commons-io.jar /*** 读取文件的倒数第3行,并打印其内容*/import java.io.File; import java.io.IOException; ...

  9. Java的各种中文乱码解决方法

    Java的各种中文乱码解决方法 参考文章: (1)Java的各种中文乱码解决方法 (2)https://www.cnblogs.com/Survivalist/p/9015754.html 备忘一下.

  10. java 中文乱码过滤器_JAVA中文乱码过滤器(用java过滤器解决中文乱码)V0422 整理版...

    JAVA中文乱码过滤器(用java过滤器解决中文乱码)V0422 整理版 不用再担心java中文乱码问题,一步到位,一次性解决.更方便更快捷. web-xml配置 EncodingFilter com ...

最新文章

  1. WinForm下ComboBox获取绑定对象集的SelectedValue补充
  2. Qt C++发送图片到QML显示
  3. ffmpeg安装与配置
  4. Ceph分布式存储学习指南1.10 iRODS
  5. 开源 免费 java CMS - FreeCMS1.3-数据对象-mail
  6. HTTP状态码的类别
  7. Linux ping命令、Linux kill命令、Linux logname命令、 Linux logout命令
  8. mysql表设计 列命名_MYSQL数据库字段命名及设计规范
  9. linux sudo输入密码无法获得锁,Linux系统提示无法获得锁/var/lib/dpkg/lock怎么办?
  10. 01-执行上下文与变量对象
  11. 指针变量的所占字节数大小确定
  12. PRML Chapter01 练习题Exercise
  13. java求职英文简历范本2篇_JAVA英文求职简历范文
  14. MFC基于对话框程序启动时隐藏窗口的实现
  15. 解决 epsg.io 网站访问不了
  16. 2020-05-08 工作中英语单词积累
  17. 深入理解计算机系统----第四章处理器体系结构
  18. Pandas + Pyecharts | ADX游戏广告投放渠道综合分析
  19. oracle锁资源不够,Oracle解锁,解决“ora00054:资源正忙”错误
  20. Pandas Task6——综合练习

热门文章

  1. KMP模式匹配 三(弦)
  2. java regex 简单使用
  3. C# Winform获取路径
  4. MFC中的问题记录 2012-2-20
  5. Windows Media Services (1) 搭建 电影服务器教程
  6. 使用Jenkins搭建持续集成环境的方法(一)
  7. 测开之路五十三:unittest运行参数
  8. 洛谷 1449——后缀表达式(线性数据结构)
  9. Hadoop平台简述
  10. Android 性能优化——之控件的优化