Java IO 经典教程 (下) (翻译自jenkov.com)
2017-12-17 17:03
543 查看
此系列文章翻译自Jakob Jenkov的java系列教程,原文地址链接为Jakob Jenkov的教程,教程比较详细,很适合初学者!
您可以查看 Java IO 经典教程 (上) (翻译自jenkov.com)
您可以查看 Java IO 经典教程 (中) (翻译自jenkov.com)
如果您更喜欢简书的风格,也可以点击链接:此文章简书链接
InputStreamReader经常被用来从文件或网络连接读取字符。例如,一个文本文件字符用的UTF-8编码,你可以使用InputStreamReader去包装FileInputStream以便去读取这样的文件。
例子首先创建了一个FileInputStream,然后用InputStreamReader来包装它。然后,例子通过InputStreamReader速去了文件中的所有内容。
注意:为了清晰起见这里忽略了一些适当的异常处理。相关的异常处理可以参考“Java IO Exception Handling”
你可以像下面这样把返回的int值强转成字符:
下面是一个给构造方法传入编码格式的例子:
注意InputStreamReader构造方法的第二个参数。
InputStreamReader会把来自底层的InputStream字节用UTF-8编码来读取。
如果你想讲字符写入到文件那么OutputStreamWriter是实用的,以UTF-8 or UTF-16等编码格式。然后,您可以将字符(char值)写入OutputStreamWriter,它将正确地编码它们,并将编码的字节写入底层的OutputStream。
注意:上面的例子省略了必要的异常处理。学习更多的异常处理相关知识,可以参考“Java IO Exception Handling”章节。
例子创建了一个OutputStreamWriter,可以把所有的字符转换为UTF-8格式的字符,并将这些字符编码的字节传入底层的OutputStream。
例子首先创建了一个FileReader,并且在构造方法传入了一个文件路径。然后,从FileReader每次读取一个字符并读取了所有的内容,最后,将FileReader关闭。
注意:上面例子省略了必要的异常处理,更多的关于异常处理的内容,可以参考“Java IO Exception Handling”。
如果你想指定一个不同的编码格式,就不要用FileReader了。可以在FileInputStream上使用InputStreamReader。InputStreamReader可以让你指定编码格式去读取文件的字节。
你也可以使用java 7中的 try-with-resources 结构。下面是如何使用try-with-resources来关闭流:
注意上面例子并没有调用close()方法。try-with-resources 结构会考虑这个的。
注意:上面为了简介省略了必要的异常处理。想要学习更多关于异常处理的内容,可以参开章节“Java IO Exception Handling”。
FileWriter也有其他的构造方法,让你能够指定不同的方法去写入文件。参考Java官方文档来获取更多内容。
刚刚讨论的构造方法只有一个参数:文件的名称,这会覆盖已经存在的文件:
FileWriter也有两个参数的构造方法:文件名称和一个布尔值。布尔值表名是覆盖文件还是向文件追加内容。下面是两个相关的例子:
如果你想指定一个不同的字符集,那么不要使用FileWriter。在FileOutputStream上使用OutputStreamWriter吧。OutputStreamWriter在写入文件的时候可以让你指定字符集。
您可以查看 Java IO 经典教程 (上) (翻译自jenkov.com)
您可以查看 Java IO 经典教程 (中) (翻译自jenkov.com)
如果您更喜欢简书的风格,也可以点击链接:此文章简书链接
InputStreamReader
Java InputStreamReader类(java.io.InputStreamReader)意图是包装了InputStream,因此将字节输入流变成基于字符的Reader。InputStreamReader经常被用来从文件或网络连接读取字符。例如,一个文本文件字符用的UTF-8编码,你可以使用InputStreamReader去包装FileInputStream以便去读取这样的文件。
InputStreamReader例子
下面是一个Java InputStreamReader的例子:InputStream inputStream = new FileInputStream("c:\\data\\input.txt"); Reader inputStreamReader = new InputStreamReader(inputStream); int data = inputStreamReader.read(); while(data != -1){ char theChar = (char) data; data = inputStreamReader.read(); } inputStreamReader.close()
例子首先创建了一个FileInputStream,然后用InputStreamReader来包装它。然后,例子通过InputStreamReader速去了文件中的所有内容。
注意:为了清晰起见这里忽略了一些适当的异常处理。相关的异常处理可以参考“Java IO Exception Handling”
read()
InputStreamReader的read()方法返回一个int值,表示读取的字符值,下面是相关代码:int data = inputStreamReader.read();
你可以像下面这样把返回的int值强转成字符:
char aChar = (char) data;
流的结束
如果read()方法返回 -1,意味着流已经全部读取完毕。-1 是int值,不是byte或short类型。当流读取完毕时,就可以关闭流了字符编码构造方法
Java InputStreamReader有许多可供选择的构造方法,允许你去指定字符集设置(ISO-Latin1, UTF-8, UTF-16 等等)。下面是一个给构造方法传入编码格式的例子:
InputStream inputStream = new FileInputStream("c:\\data\\input.txt"); Reader inputStreamReader = new InputStreamReader(inputStream, "UTF-8");
注意InputStreamReader构造方法的第二个参数。
InputStreamReader会把来自底层的InputStream字节用UTF-8编码来读取。
关闭InputStreamReader
此处的内容和其他流完全一致OutputStreamWriter
Java OutputStreamWriter类(java.io.OutputStreamWriter)的意图是包装OutputStream,从而将字节输出流的方式转换成自己字符的Writer。如果你想讲字符写入到文件那么OutputStreamWriter是实用的,以UTF-8 or UTF-16等编码格式。然后,您可以将字符(char值)写入OutputStreamWriter,它将正确地编码它们,并将编码的字节写入底层的OutputStream。
OutputStreamWriter例子
下面是一个简单的Java OutputStreamWriter例子:OutputStream outputStream = new FileOutputStream("c:\\data\\output.txt"); Writer outputStreamWriter = new OutputStreamWriter(outputStream); outputStreamWriter.write("Hello World"); outputStreamWriter.close();
注意:上面的例子省略了必要的异常处理。学习更多的异常处理相关知识,可以参考“Java IO Exception Handling”章节。
字符编码的构造方法
OutputStreamWriter提供了一些构造方法,可以让你在初始化时设置好字符集,如ISO-Latin1, UTF-8, UTF-16等:OutputStream outputStream = new FileOutputStream("c:\\data\\output.txt"); Writer outputStreamWriter = new OutputStreamWriter(outputStream, "UTF-8");
例子创建了一个OutputStreamWriter,可以把所有的字符转换为UTF-8格式的字符,并将这些字符编码的字节传入底层的OutputStream。
FileReader
FileReader类(java.io.FileReader),可以基于字符流来读取文件内容。它的工作机制类似于FileInputStream,但是FileInputStream是读取字节。换句话来说,FileReader的意图是读取文本。一个字符可能对于一个或多个字节,这取决于字符的编码格式。FileReader例子
下面是Java FileReader的简单例子:Reader fileReader = new FileReader("c:\\data\\input-text.txt"); int data = fileReader.read(); while(data != -1) { //do something with data... doSomethingWithData(data); data = fileReader.read(); } fileReader.close();
例子首先创建了一个FileReader,并且在构造方法传入了一个文件路径。然后,从FileReader每次读取一个字符并读取了所有的内容,最后,将FileReader关闭。
注意:上面例子省略了必要的异常处理,更多的关于异常处理的内容,可以参考“Java IO Exception Handling”。
read()
FileReader的read()方法返回了一个int值,此值为读取的字符值。如果方法返回 -1,则代表数据已经读取完毕。FileReader字符编码
FileReader假设你想以计算机的默认编码格式来解码文件中的字节。这并不一定是你想要的,你也改不不了这个。如果你想指定一个不同的编码格式,就不要用FileReader了。可以在FileInputStream上使用InputStreamReader。InputStreamReader可以让你指定编码格式去读取文件的字节。
关闭FileReader
当你从FileReader读取完字符之后你要记得去关闭它。关闭FileReader可以调用close()方法。可以像下面这样来使用:fileReader.close();
你也可以使用java 7中的 try-with-resources 结构。下面是如何使用try-with-resources来关闭流:
try(FileReader fileReader = new FileReader("c:\\data\\text.txt")){ int data = fileReader.read(); while(data != -) { System.out.print((char) data)); data = fileReader.read(); } }
注意上面例子并没有调用close()方法。try-with-resources 结构会考虑这个的。
FileWriter
Java FileWriter类(java.io.FileWriter)可以基于字符去将数据写到文件。再这方面他更像FileOutputStream,但FileOutputStream 时基于字节的,FileWriter是基于字符的。换句话说FileWriter 的意图是去写文本。一个字符可能对于一个或多个字节,这取决于使用的字符集。FileWriter 例子
下面是关于FileWriter的一个简单例子:Writer fileWriter = new FileWriter("data\\filewriter.txt"); fileWriter.write("data 1"); fileWriter.write("data 2"); fileWriter.write("data 3"); fileWriter.close();
注意:上面为了简介省略了必要的异常处理。想要学习更多关于异常处理的内容,可以参开章节“Java IO Exception Handling”。
FileWriter也有其他的构造方法,让你能够指定不同的方法去写入文件。参考Java官方文档来获取更多内容。
覆盖文件 vs 向文件追加内容
当你创建了一个FileWriter,你可以决定是覆盖文件还是向已存在的文件追加内容。这是根据你选用的构造方法来决定的。刚刚讨论的构造方法只有一个参数:文件的名称,这会覆盖已经存在的文件:
Writer fileWriter = new FileWriter("c:\\data\\output.txt");
FileWriter也有两个参数的构造方法:文件名称和一个布尔值。布尔值表名是覆盖文件还是向文件追加内容。下面是两个相关的例子:
Writer fileWriter = new FileWriter("c:\\data\\output.txt", true); //appends to file Writer fileWriter = new FileWriter("c:\\data\\output.txt", false); //overwrites file
FileWriter字符编码
FileWriter是假设你想以操作系统默认的编码将字节写入文件中。这不一定是你想要的,并且你不能改变这个。如果你想指定一个不同的字符集,那么不要使用FileWriter。在FileOutputStream上使用OutputStreamWriter吧。OutputStreamWriter在写入文件的时候可以让你指定字符集。
关闭FileWriter
此章节内容和其他章节内容一致相关文章推荐
- Java IO 经典教程 (中) (翻译自jenkov.com)
- Java IO 经典教程 (上) (翻译自jenkov.com)
- Java 输入输出流教程(三)——【管道】(原作:Java IO Tutorial by Jakob Jenkov)
- Java 输入输出流教程(一)(原作:Java IO Tutorial by Jakob Jenkov)
- Java 输入输出流教程(二)——【文件】(原作:Java IO Tutorial by Jakob Jenkov)
- Java 8 官方教程翻译——方法引用(method reference)
- Java 3D API官方教程[翻译五]
- Java中的阻塞和非阻塞IO包各自的优劣思考(经典)
- Java 当中的IO(二)-- MarsChen Java4Android 教程学习笔记
- JDBC演绎事务处理在Java中的经典教程
- Java NIO系列教程(12):Java NIO与IO
- JUnit单元测试教程(翻译自Java Code Geeks)
- 10本经典Java教程,都是pdf完整版的
- java IO文件操作入门经典例子
- 免费视频教程分享 :java经典面试题深度解析
- mybatis错误——java.io.IOException: Could not find resource com/xxx/xxxMapper.xml
- Java的IO系统简明而经典的介绍
- Java经典教程
- java io 流 输入输出 大牛经典总结
- JUnit单元测试教程(翻译自Java Code Geeks)