字符流:
文本和文本文件的区别:
文本:
java的文本(char)是16位无符号整数,是字符的unicode编码(双字节编码)。
文件:
文件是byte byte byte…的数据序列。
文本文件:
文本文件是文本(char)序列按照某种编码方案(utf-8,utf-16be,gbk)序列化为byte的存储结果。
字符流(Reader,Writer)
操作的是文本文件。对于mp3,二进制文件是字节文件不适合用字符流读取,因为读取出来的是char,没有意义。
字符的处理,一次处理一个字符
字符的底层仍然是基本的字节序列
字符流(字节字符转换流)的基本实现:
InputStreamReader:
完成byte流解析为char流,按照编码解析
OutputStreamWriter:
提供char流到byte流,按照编码处理
字符流的基本方法的使用:
package com.test.FileInputStreamReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
public class FileInputStreamReaderTest {
public static void main(String[] args){
try {
String filename = "C:\\Users\\Administrator\\Desktop\\javaIO\\读取的测试文件.txt";
ReadFile1(filename);
ReadFile2(filename);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 单字符读取
* 返回的是读到字节转换成int类型(最后8位)的值
* @param fis
*/
public static void ReadFile1(String filename) throws IOException{
System.out.println("单字节读取的方式:");
InputStreamReader isr = new InputStreamReader(new FileInputStream(filename));
int i;
while((i = isr.read())!=-1){
System.out.print((char)i);
}
isr.close();
}
/**
* 批量读取
* 放入buf这个字符数组中,从第0个位置开始放置,最多放buf.length个
* 返回的是读到字符的个数
* @param fis
* @throws IOException
*/
public static void ReadFile2(String filename) throws IOException{
System.out.println();
System.out.println("批量读取的方式:");
InputStreamReader isr = new InputStreamReader(new FileInputStream(filename));
char[] buf = new char[2*1024];
int i;
while((i = isr.read(buf, 0, buf.length))!=-1){
String str = new String(buf,0,i);
System.out.println(str);
}
isr.close();
}
}
结果截图:
注意:在操作字符流的时候要注意编码的问题。这里读取的文件是gbk编码格式的,所以在读取的时候要采用gbk编码的读取方式。否则就会出现乱码。
FileWriter和FileReader:
其实上边的代码中的:
InputStreamReader isr = new InputStreamReader(new FileInputStream(String filename));
这部分代码完全可以使用
FileReader fr = new FileReader(String filename);
来替代。
FileReader和FileWriter的基本方法的使用:
package com.test.FileReaderAndFileWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class FileReaderAndFileWriterTest{
public static void main(String[] args) throws IOException{
FileReader fr = new FileReader("C:\\Users\\Administrator\\Desktop\\javaIO\\读取的测试文件.txt");
FileWriter fw = new FileWriter("C:\\Users\\Administrator\\Desktop\\javaIO\\写出的测试文件.txt");
char[] buf = new char[2*1024];
int i;
while((i = fr.read(buf, 0, buf.length))!=-1){
fw.write(buf, 0, i);
fw.flush();
}
fr.close();
fw.close();
}
}
注意:FileReader和FileWriter与之前的代码中通过InputStreamReader包装FileInputStream相比,虽然简洁,但是不能设置采用什么编码读取文件,只能使用项目默认的编码读取文件。
字符流的过滤器:
BufferedReader——>readLine 一次读一行
BufferedWriter/PrintWriter———>写一行
package com.test.BufferedReaderAndBufferedWriter;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
public class BufferedReaderTest {
public static void main(String[] args){
String filename = "C:\\Users\\Administrator\\Desktop\\javaIO\\读取的测试文件.txt";
try {
BufferedWriter(filename);
PrintWriter(filename);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 使用BufferedWriter写出
* @throws IOException
*/
public static void BufferedWriter(String filename) throws IOException{
BufferedReader br = new BufferedReader(
new InputStreamReader(
new FileInputStream(
filename)));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("C:\\Users\\Administrator\\Desktop\\javaIO\\测试文件1.txt")));
String line;
while((line = br.readLine())!=null){
System.out.println(line);
bw.write(line);
bw.newLine();
bw.flush();
}
br.close();
bw.close();
}
/**
* 使用PrintWriter写出
* @param filename
* @throws IOException
*/
public static void PrintWriter(String filename) throws IOException{
BufferedReader br = new BufferedReader(
new InputStreamReader(
new FileInputStream(
filename)));
PrintWriter pw = new java.io.PrintWriter("C:\\Users\\Administrator\\Desktop\\javaIO\\测试文件2.txt");
String line;
while((line = br.readLine())!=null){
pw.println(line);
pw.flush();
}
br.close();
pw.close();
}
}
上边这两种写出文件的方法的效果是一样的。
<script type="text/javascript">
$(function () {
$('pre.prettyprint code').each(function () {
var lines = $(this).text().split('\n').length;
var $numbering = $('<ul/>').addClass('pre-numbering').hide();
$(this).addClass('has-numbering').parent().append($numbering);
for (i = 1; i <= lines; i++) {
$numbering.append($('<li/>').text(i));
};
$numbering.fadeIn(1700);
});
});
</script>
版权声明:本文为博主原创文章,未经博主允许不得转载。
分享到:
相关推荐
java IO流学习笔记——(2)文件字符流&字节数组流 文件字符流FileReader&FileWriter FileReader :通过字符的方式读取文件,仅适合字符文件 FileWriter :通过字节的方式写出或追加数据到文件中,仅适合字符文件 部分...
目录java IO流学习笔记——(3)字节缓冲流&字符缓冲流&转换流&数据流字节缓冲流 —BufferedInputStream&BufferedOutputStream字符缓冲流—BufferedReader&BufferedWriter转换流—InputStreamReader&...
{7.9}字符流}{112}{section.7.9} {7.10}缓冲字符输入输出流}{113}{section.7.10} {7.11}文件常用操作}{114}{section.7.11} {7.12}对象序列化}{117}{section.7.12} {8}多线程}{121}{chapter.8} {8.1}线程的常用...
学习笔记.总结开始基本概念File类(*****)*构造方法**常用方法*字节流(*****)字符流(*****)处理流(*****)关闭流(***)打印流(***)其他流(**)1:字节数组 节点流2:基本数据类型+String 保留数据+类型3:...
031203_【第12章:JAVA IO】_字节流与字符流笔记.pdf 031204_【第12章:JAVA IO】_字节-字符转换流笔记.pdf 031205_【第12章:JAVA IO】_内存操作流笔记.pdf 031206_【第12章:JAVA IO】_管道流笔记.pdf 031207_【第...
注意:默认类型转换(自动类型提升)会丢失精度,但只有三种情况: int>float; long>float; long>double. 看一下他们的有效位就明白。 二进制是无法精确的表示 0.1 的。 进行高精度运算可以用java.math包中...
用于存放学习java网络编程过程遇见的重难点笔记和相关代码 附带代码大部分是《java网络编程 第四版》的课程代码 对运算字符串进行识别的作业 @since2020.11.26 IO流 - 多线程 @since2020.11.26 internet地址 @since...
本书内容非常全面,涵盖了《Java编程思想》、《Java学习笔记》等书籍所有知识要点,并结合作者自己经验总结而编写,内容丰富程度胜过一切书籍 众所周知,一般书籍为了销售需要,往往很少的知识点,却需要添加大量的...
字节流、字符流 节点流、包装流 4.字节流 InputStream:FileInputStream、ByteArrayInputStream、ObjectInputStream OutputStream:FileOutputStream、ByteArrayOutputStream、ObjectOutputStream 5....
字符流 NIO等 Java8 Java8语言的行为参数化和流编程等 Java虚拟机 Java虚拟机相关,内存模型,类加载机制,JVM性能解析等 零散的文章 数据结构与算法 算法的度量,基础数据结构,链表,二叉树,B树,图论,深度和...
2、Java IO类:输入输出流、压缩流(Zip流) 3、Java File类操作:文件及文件夹的遍历(递归)、读写、复制,批量修改文件后缀名,csv格式文件的读写 4、Java FilenameFilter类的使用:遍历指定后缀名的文件 5、Java中...