java 文件读写

---恢复内容开始---

一.流:一维单方向

1. 一维:即只需要给出一个参数就可以确定在流中的位置

2. 单方向:只能从一个方向流向另一个方向:要么是读,要么是写,不能在同一个流中读写并行。

那么想要既读又写,那么就需要开两个流。

例如:System.out.println()中的out就是一个可以用来做输出的流。

3. InputStream:从inputstream中按字节为单位读取,标记,作为返回值等。

1)int read() 、返回独到的文件的位置,若读到了末尾,返回-1;

   read(byte[], int off, int len)、

   read(byte b[])

2)int available()

3)mark()、reset()......

注:所有的read函数都是按照字节为单位进行读入的。

4. OutoutStream:

int write()

write(byte[])

write(byte[], int off, int len)

write的性质和read类似

二.文件流:FileInputStream and FileOutputStream

但凡是read或是write函数都是只能按字节为单位进行读取

1 //声明
2 FileOutputStream out = new FileOutputStream(filepath);
3 out.write(something);
4 out.close();
FileOutputStream

三.过滤器流:

 1. 如果想要从文件中读取一个int, 或是String 或是其他, 而不只是byte的二进制数据,那么就要用到过滤器流

 2. 在已有的文件流的基础上一层层的增加过滤器,我们可以利用这些过滤器实现那些我们可能需要的功能.

 

 1 //通过DateOutputStream可以实现完成基础数据类型的写操作
 2 //再将其存入到一层缓冲区流中
 3 //最后通过文件流实现输出
 4 DateOutputStream out = new DataOutputStream(
 5                        new BufferedOutputStream(
 6                        new FileOutputStream(filepath)));
 7 int i = 0x666666;
 8 out.writeInt(i);
 9 out.close();
10 //同理,我们可以实现一个基础数据类型的读入流:
11 //其实现原理正好为输出流的反向过程
12 DataInputStream in = new DataInputStream(
13                      new BufferedInputStream(
14                      new FileInputStream(filepath)));
15 int j = in.readInt();
16 System.out.println(j);
View Code

 

3. 文本输入输出:Reader and Writer(处理unicode 字符)

 1 //我们使用writer实现文本的输出
 2 //通过一个BufferedWriter实现了一个缓冲区(可有可无)
 3 //OutputStreamWriter是Stream和Writer之间的桥梁,帮助了我们实现了文本到二进制的转换
 4 //最后基于一个实际的文件输出流FileOutputStream,实现写功能
 5 PrintWriter pw = new PrintWriter(
 6                  new BufferedWriter(
 7                  new OutputStreamWriter(
 8                  new FileOutputStream("try.txt"))));            
 9 String txt = "Hello World!";
10 pw.println(txt);
11 pw.close();
12 //文本读出
13 //原理类似,过程相反
14 BufferedReader in = new BufferedReader(
15                     new InputStreamReader(
16                     new FileInputStream(filepath)));
17 //
18 String line;
19 while((line = in.readLine()) != null)
20     System.out.println(line);
View Code

 四.编码问题:

1. 当从文件中读入数据并输出后,发现全是乱码,那么说明你读入的格式有问题。

2. 默认情况下,函数是以GB(国标码)形式读入的。

3. 这种情况下我们需要更改读入的编码格式:

 InputStreamReader()中可以有两个参数,第一个参数:具体的数据读入流, 第二个参数:以字符串的形式生命数据读入类型

 五.总结:

以上参考自中国大学mooc, 翁恺老师的java语言进阶

图片来自于中国大学mooc, 翁恺老师的java语言进阶

 

做个宣传:微信公众号:计算机技术杂谈。
目前里面介绍:NLP, 大数据, 视听觉信号处理的基本知识。每日更新一篇。大家有兴趣的可以关注一下。二维码如下:做个宣传:微信公众号:计算机技术杂谈。
目前里面介绍:NLP, 大数据, 视听觉信号处理的基本知识。每日更新一篇。大家有兴趣的可以关注一下。二维码如下:省赛

 

 

 

 

---恢复内容结束---

posted @ 2019-03-21 20:18  水尺  阅读(933)  评论(0编辑  收藏  举报