Javase-I/O

1.基础流:

  1. 字节流:

    1. 文件流:FileInputStream, FileOutputStream
    2. 字节数组流:ByteArrayInputStream, ByteArrayOutputStream
  2. 字符流:
    1. 文件流:FileReader, FileWriter
    2. 字符数组流:CharArrayReader, CharArrayWriter

2.修饰流:

  1. 字节流:

    1. 缓冲:BufferedInputStream, BufferedOutputStream
  2. 字符流:
    1. 缓冲:BufferedReader, BufferedWriter

下面逐个测试:

FileInputStream, FileOutputStream

 1 import java.io.ByteArrayInputStream;
 2 import java.io.ByteArrayOutputStream;
 3 import java.io.File;
 4 import java.io.FileInputStream;
 5 import java.io.FileNotFoundException;
 6 import java.io.FileOutputStream;
 7 import java.io.FileReader;
 8 import java.io.IOException;
 9 import java.io.RandomAccessFile;
10 import java.io.StringBufferInputStream;
11
12
13 public class FileStream {
14
15     public static void main(String[] args) throws IOException
16     {
17         //测试FileInputStream,FileOutputStream
18         FileInputStream fis = new FileInputStream("file.txt");
19         FileOutputStream fos = new FileOutputStream("file1.txt");
20
21         byte[] bytes = new byte[fis.available()];
22
23         fis.read(bytes);
24         fos.write(bytes);
25
26         String s;
27         s = new String(bytes);
28         System.out.println(s);
29
30     }
31
32 }

这里bis从文件file.txt按字节读取文件内容到字节数组bytes,bos将字节数组写入file1.txt文件,并在控制台输出。

ByteArrayInputStream, ByteArrayOutputStream:

 1 import java.io.ByteArrayInputStream;
 2 import java.io.ByteArrayOutputStream;
 3
 4
 5 public class ByteStreamTest {
 6
 7     public static void main(String args[])
 8     {
 9         //测试ByteArrayOutputStream
10         ByteArrayOutputStream baos = new ByteArrayOutputStream();
11         //289截断到一个字节后二进制为0000 0033,对应的ascii字符为‘!‘
12         //原型为write(int),将289写入到字节数组
13         baos.write(289);
14
15         byte[] b = baos.toByteArray();
16         System.out.println(b.length);
17         //这里字节又被强转为两个字节的char类型,二进制为0000 0000 0000 0033
18         System.out.println((char)b[0]);
19
20         ByteArrayInputStream bais = new ByteArrayInputStream(b);
21         //这里read()将1个字节0000 0033转为整型返回,之后又强转为char
22         char c = (char) bais.read();
23         System.out.println(c);
24     }
25 }

ByteArrayOutputStream中有字节缓冲,这里将289写入一个字节,发生截断,使用baos.toByteArray()取出字节数组,打印其长度为1,用该字节数组初始化ByteArrayInputStream,从bais取出该字节数组中的一个字节,强转为char类型,33对应的assci码为!,所以输出!。

1
!
!

FileReader, FileWriter

 1 import java.io.FileReader;
 2 import java.io.FileWriter;
 3 import java.io.IOException;
 4
 5
 6 public class FileReaderWriterTest {
 7     public static void main(String args[]) throws IOException
 8     {
 9         FileReader fr = new FileReader("file.txt");
10         char[] s1 = new char[100];
11         //按字符也就是两个字节读入到字节数组
12         fr.read(s1);
13         for (int i = 0; i < s1.length; i++)
14             System.out.print(s1[i]);
15
16
17         char[] s2 = {‘你‘, ‘好‘};
18         FileWriter fw = new FileWriter("fileTo.txt");
19         //将字符数组写入到文件
20         fw.write(s2);
21
22         //关闭文件,刷新缓冲区
23         fw.close();
24         fr.close();
25
26
27      }
28
29 }

fr从file.txt读取内容到字符数组,并将其打印,fw将字符数组写入文件fileTo.txt。

CharArrayReader, CharArrayWriter

 1 import java.io.CharArrayReader;
 2 import java.io.CharArrayWriter;
 3 import java.io.IOException;
 4
 5
 6 public class CharArrayReaderWriterTest {
 7
 8     public static void main(String[] args) throws IOException
 9     {
10         CharArrayWriter caw = new CharArrayWriter();
11
12         char[] c = {‘字‘, ‘符‘, ‘数‘, ‘组‘};
13         //将字符数组写入缓冲区
14         caw.write(c);
15         //获取字符数组
16         char[] cc = caw.toCharArray();
17         String s = new String(cc);
18         System.out.println(s);
19
20         //使用字符数组c构造CharArrayReader
21         CharArrayReader car = new CharArrayReader(c);
22         int a;
23         //读取每个字符
24         while ( (a = car.read()) != -1)
25         {
26             System.out.println((char)a);
27         }
28
29     }
30 }

输出:

字符数组
字
符
数
组

BufferedInputStream, BufferedOutputStream:

 1 public class BufferedStream {
 2
 3     public static void main(String args[]) throws IOException
 4     {
 5         //修饰流,需要由InputStream,OutputStream构造,本质上还是按字节读入写出,但是增加了缓冲
 6         BufferedInputStream bis = new BufferedInputStream(new FileInputStream("file.txt"));
 7         BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("fileTo.txt"));
 8
 9         int bytesCount = 0;
10         int a;
11         while ( (a = bis.read()) != -1)
12         {
13             bytesCount++;
14             bos.write(a);
15         }
16         System.out.println("读取的字节数:"+bytesCount);
17
18
19         //记得关闭流,刷新缓冲区
20         bis.close();
21         bos.close();
22     }
23 }

BufferedInputStream, BufferedOutputStream是修饰流,还是按字节读取,增加了缓冲机制,这是实现了按字节将file.txt的内容复制到fileTo.txt中。

BufferedReader, BufferedWriter:

 1 import java.io.BufferedReader;
 2 import java.io.BufferedWriter;
 3 import java.io.FileReader;
 4 import java.io.FileWriter;
 5 import java.io.IOException;
 6
 7
 8 public class BufferedReadWriterTest {
 9
10     public static void main(String args[]) throws IOException
11     {
12         BufferedWriter bw = new BufferedWriter(new FileWriter("file.txt"));
13         BufferedReader br = new BufferedReader(new FileReader("file.txt"));
14
15         bw.write("第一行\n");
16         bw.write("第二行\n");
17         bw.write("第三行\n");
18         bw.flush();
19
20
21         String s;
22         while ( (s = br.readLine()) != null)
23         {
24             System.out.println(s);
25         }
26
27         br.close();
28         bw.close();
29
30
31
32     }
33 }

BufferedReader, BufferedWriter是修饰流,提供按行读取的功能,这里向文件写入三行数据,然后按行读取。

第一行
第二行
第三行
时间: 2024-12-29 14:32:43

Javase-I/O的相关文章

JavaSE入门学习21:Java面向对象之接口(interface)(二)

一接口实现的多态 在上一篇博文:JavaSE入门学习20:Java面向对象之接口(interface)(一)中提到了接口的实现存在多态性,那么 这一篇主要就要分析接口实现的多态. 实例一 Test.java源文件代码: public class Test{ public static void main(String[] args){ //实现接口Singer Singer s1 = new Student("Amy"); s1.sing(); s1.sleep(); s1.study

JavaSE基础之JDBC

JavaSE基础之JDBC 1.JDBC 的步骤: ①加载数据库驱动: a.MySQL:com.mysql.jdbc.Driver: b.SQLServer:com.microsoft.jdbc.sqlserver.SQLServerDriver: c.Oracle:oracle.jdbc.driver.OracleDriver: ②获取数据库链接:  a.MySQL:jdbc:mysql://localhost:3306/DataBaseName: b.SQLServer:jdbc:sqlse

JavaSE入门学习24:Java面向对象补充

一Java中的Object类 Object类是所有Java类的父类,如果一个类没有使用extends关键字明确标识继承另外一个类,那么这个类默认 继承Object类. public class Person{ // } //等价于 public class Person extends Object{ // } Object类中的方法,适合所有子类. 1)toString()方法 在Object类中定义有public String toString()方法,其返回值是String类型,描述当前对

JavaSE入门学习23:Java面向对象之构造方法

学了JavaSE面向对象这一部分,也该对构造方法做一个总结了. 一构造方法 在多数情况下,初始化一个对象的最终步骤是去调用这个对象的构造方法.构造方法负责对象的初始化工作,为 实例变量赋予合适的初始值.构造方法必须满足以下语法规则: (1)方法名必须与类名相同: (2)不要声明返回类型: (3)不能被static.final.synchronized.abstract和native修饰.构造方法不能被子类继承,所以用final和abstract 修饰没有意义.构造方法用于初始化一个新建的对象,所

【JavaSE】day11_Reader和Writer_PrintWriter_BufferedReader

[JavaSE]day11_Reader和Writer_PrintWriter 1.Reader和Writer 1)Writer,Reader 字符输出,输入流的父类. * 字符流特点:以字符为单位读写数据. * 字符流只能读写文本数据.所以不要用字符流读取非文本文件. * 字符流只是简化了我们对于字符串的读写操作不用自行在字节与字符之间转换. * 所以字符流都是高级流,底层本质还是要用字节读写数据. 2)OutputStreamWriter 按照给定的字符集,将字符串转换为一组字节后写出. 代

【史上最强JavaSE笔记】之数组篇

各位程序猿,各位攻城狮,各位蜥蜴鸥以及各位棕鲸鲤们~~大家好,我是潘师傅,欢迎大家收看由我为你们带来的[史上最强JavaSE笔记]系列,其实也可以叫[嘻哈JavaSE笔记]的,第一次在博客园发帖,想想还真是有点小激动呢,各位求支持呀,哈哈,那么回归正题,我把自己之前学习积累的笔记拿出来跟大家分享一下,方便大家更好的理解和复习,希望能够对大家有所帮助哈,这次发的是JavaSE方面数组篇的,内容不一定全面哦,欢迎大家前来留言交流哈,不足的地方还望大家多多指出和指导哈~(由于首次发文章,布局可能比较乱

java-se基础 2(注释和原生数据类型)

Java SE 第二讲: 1. Windows: notepad, editplus, ultraedit, gvim Linux: vi, vim, gedit 2. Java中的数据类型分为两大类: 1) 原生数据类型 (Primitive Data Type) 2) 引用类型(对象类型) (Reference Type) 3. 变量与常量:所谓常量,就是值不会变化的量:所谓变量,就是值可以变化的量. 4. 如何定义变量? 变量类型 变量名; int a; 5. 如何为变量赋值? 变量名 =

JavaSE 文件递归之删除&amp;amp;获取文件夹文件夹中全部的以.jpg的文件的绝对路径

1.递归删除文件 假设一个文件夹以下还有子文件夹,进行删除的话会 报错,这个时候要使用递归的方式来删除这个文件文件夹中的全部文件以及文件夹 package cn.itcast.digui; import java.io.File; /** * 递归删除demo目录中全部文件包含目录 * 分析: * A:封装目录 * B:获取改目录下的全部文件或者目录 * C:遍历改file数组,得到每个File对象 * D:推断该file对象是都是目录 * 是:回到B * 否:删除 * @author Admi

javase基础

目录 目录... 1 第一天... 5 1:计算机概述(了解) 5 2:键盘功能键的认识和快捷键(掌握) 5 3:常见的DOS命令(掌握) 6 4:Java语言概述(了解) 6 5:JDK,JRE,JVM的作用及关系(掌握) 7 6:JDK的下载,安装,卸载(掌握) 7 7:第一个程序:HelloWorld案例(掌握) 7 8:常见的问题(掌握) 8 9:path环境变量(掌握) 8 10:classpath环境变量(理解) 8 第二天... 10 1:关键字(掌握) 10 2:标识符(掌握)

JavaSE注释

注解在JavaSE中算是比较高级的一种用法了,为什么要学习注解,我想大概有以下几个原因: 1. 可以更深层次地学习Java,理解Java的思想. 2. 有了注解的基础,能够方便阅读各种框架的源码,比如hibernate,SpringMVC等等.里面就用到了大量的注解.即便无法阅读源码,以后使用这些框架,会有一种心理上的安全感. 3. 方便今后跟别人吹牛.(当然,这也很重要.) 好了,话不多说,我们开始吧. 1. 从注释的角度来理解注解 我想了很久,最终决定以这个小标题作为第一节的标题,我们在编写