java(8):输入输出流

您所在的位置:网站首页 java中的输入流和输出流 java(8):输入输出流

java(8):输入输出流

2024-06-25 20:31| 来源: 网络整理| 查看: 265

目录

8.1 流的概念

8.1.1 流的分类

8.1.2 流的处理工程

8.2 写流时用到的辅助类

8.2.1 File类

8.2.2 byte类

(1)读取时:

(2)写入时:

8.3 对字节流操作:InputStream(读取)OutputStream(写入)

8.3.1 抽象类:InputStream类(读取)

8.3.2 实例化:FileInputStream

8.3.3 抽象类:OutputStream(写入)

8.3.4 实例化:FileOutputStream

(1)覆盖式写入:

(2)续写式写入:

8.4 对字符流操作:Reader类、Writer类

8.4.1 抽象类:Reader

8.4.2 实例化:FileReader(读取)

8.4.3 抽象类:Writer(写入)

8.4.4 实例化:FileWriter

(1)覆盖式写入:

(2)续写式写入:

8.1 流的概念

Java 语言采用流的机制来实现输入/输出。所谓流,就是数据的有序排列。 而流可以是从某个源(称为流源,Source of Stream)出来,到某个目的地(称为流汇 ,Sink of Stream)去的。

8.1.1 流的分类 流向分:输入流、输出流流源分:字符流、字节流功能分:节点流、处理流

java 中统一将流的类放在 java.io 包下。

8.1.2 流的处理工程

有两个分别是:FileInputStream、FileoutputStream. 

1、Java 中可以使用 FileInputStream 从一个文件中读取数据,FileInputStream 就是一个流处理器

2、类似的也可以通过FileOutputStream向一个文件中写入数据。

3、Java 中提供了一种称作为链接的机制,可以将一个流处理器与另一个流处理器首尾相连,形成一个流管道的链接。

8.2 写流时用到的辅助类 8.2.1 File类

输入输出流的载体是文件

File类用于封装系统的文件和目录的相关信息。在该类中定义了一些与平台无关的方法来操作文件。例如文件的大小、修改时间、文件路径等。

//创建File对象的三种方法 new File (String pathName); File file = new File("E://1.txt"); //parent :父抽象路径名 child:子路径名字符串 new File(String parent , String child);

方法:

返回方法说明StringgetName获取文件名称StringgetParent获取文件的父路径字符串StringgetPath获取文件的相对路径字符串StringgetAbsolutePath获取文件的绝对路径字符串booleanexists判断文件或者文件夹是否存在booleanisFile判断是不是文件类型booleanisDirectory判断是不是文件夹类型booleandelete删除文件或文件夹,如果删除成功返回结果为truebooleanmkdir创建文件夹,创建成功返回truebooleansetReadOnly设置文件或文件夹的只读属性longlength获取文件的长度longlastModified获取文件的最后修改时间String[ ]list获取文件夹中的文件和子文件夹的名称,并存放到字符串数组中

注意:在使用delete()方法删除File对象时,如果删除的对象是目录,该目录中的内容必须为空。

8.2.2 byte类 (1)读取时: byte byt[] = new byte[1024]; //1024是什么意思

byte数组的初始化,数组的长度为1024, 代码看来表达的是每次从文件读取1024个字节。 8bit(位)是1byte(字节) 1024byte(字节)是1kb byte[] bytes = new byte[1024]是1kb

(2)写入时: new String(byt, 0, len); //这里的0是什么意思

这是将字节数组中角标为 0 到角标为 len-1 转化为字符串。 第一个byt参数就是你定义的数据名; 第二个0就是从数组里角标为0(也就是第一位)开始转换字符串; 第三个len就是你读取文件所读到的字节个数。

8.3 对字节流操作:InputStream(读取)OutputStream(写入) 8.3.1 抽象类:InputStream类(读取)

方法:

返回方法说明intavailable()返回当前输入流的数据读取方法可以读取的有效字节数量Abstract intread()从当前数据流中读取一个字节。若已达到流结尾,则返回-1intread(byte[ ] bytes)从当前输入流读取一定的byte数据,并存取在数组中,然后返回读取的byte数据的数量,若已到达流结尾,则返回-1。voidreset()将当前的输入流重新定位到最后一次调用mark()方法时的位置voidmark(int readlimit)在当前输入流中做标记位置,当调用reset()方法时将返回到该位置,从标记位置开始,到再读入readlimit个字符为止,这个标记都维持有效。BooleanmarkSupported()测试当前输入流是否支持mark()和reset()方法,只要其中一个不支持,则返回falselongskip(long n)跳过和丢弃当前输入的n个字节数据voidclose()关闭当前输入流,并释放任何与之相关联的系统资源createNewFile()创建同名文件! 8.3.2 实例化:FileInputStream

注意:

1、File得到文件名

2、read读取字节

3、new String(bytes2, 0, len) 实现将字节转换成字符串输出

package aaa; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; /** * 创建OutputStream实例out,并将其赋值为System.out标准输出流,通过write方法向流中写入数据 */ public class FileCreate { public static void main(String[] args) { File file = new File("D:/", "word.txt"); //创建文件对象 try { FileInputStream input = new FileInputStream(file); byte[] bytes2 = new byte[1024]; int len = input.read(bytes2); //获取字节长度 System.out.println("文件中的信息是:" + new String(bytes2, 0, len)); //将字节转化成字符串输出!!!因为我们要的是字符串! input.close(); } catch (FileNotFoundException e) { System.out.println("文件不存在或者文件不可读或者文件是目录"); } catch (IOException e) { System.out.println("读取过程存在异常"); } } } 8.3.3 抽象类:OutputStream(写入) 返回方法说明voidwrite(byte[ ] b)将byte[ ] 数组中的数据写入当前输出流voidwrite(byte[] b ,int off, int len)将byte[ ]数组下标off开始的len长度的数据写入当前输出流Abstract voidwrite(int b)写入一个byte数据到当前输出流voidflush()刷新当前输出流,并强制写入所有缓冲的字节数据voidclose()关闭当前输出流 8.3.4 实例化:FileOutputStream (1)覆盖式写入:

创建FileOutputStream流以写入数据到File对象表示的文件。 如果第二个参数为FLASE(默认),则字节将覆盖式写入。 

将内容写入文件!用的时write方法! package aaa; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; /** * 创建OutputStream实例out,并将其赋值为System.out标准输出流,通过write方法向流中写入数据 */ public class FileCreate { public static void main(String[] args) { File file = new File("D:/", "word.txt"); //创建文件对象 try { if (!file.exists()) { //如果文件不存在则新建文件 file.createNewFile(); } FileOutputStream output = new FileOutputStream(file); byte[] bytes = "Java数据交流管道".getBytes(); //根据上方的图可知,流之间交换的是字节,所以这句话的含义是将文字转换成字节 output.write(bytes); //将数组的信息写入文件中,多次运行直接覆盖之前的内容! output.close(); //一定要关闭!! } catch (FileNotFoundException e) { System.out.println("文件不存在或者文件不可读或者文件是目录"); } catch (IOException e) { System.out.println("读取过程存在异常"); } }} (2)续写式写入:

创建FileOutputStream流以写入数据到File对象表示的文件。 如果第二个参数为TRUE,则字节将覆盖式写入。 

实例:

8.4 对字符流操作:Reader类、Writer类 8.4.1 抽象类:Reader

方法:

返回方法说明booleanready()判断此数据流是否准备好intread()读入一个字符,若已读到流结尾,则返回值为-1intread(char[ ])读取一些字符到char[ ]数组内,并返回所读入的字符的数量,若已到达流结尾,则返回-1Abscract intread(char[ ] chars,int off,int len)读取一些字符到char[ ]数组下标从off开始到off+len的位置,并返回所读入的字符的数量,若已到达流结尾,则返回-1;voidreset()将当前输入流重新定位到最后一次mark()方法时的位置voidmark(int readLimit)将当前输入流中做标记,当调用reset方法时将返回到该位置,从标记位置开始,到再读入readLimit个字符为止,这个标记都维持有效booleanmarkSupported测试当前输入流是否支持mark()方法和reset()方法。只要有一个方法不支持,则返回-1longskip(long n)跳过参数n指定的字符数量,并返回所跳过字符的数量Abstract voidclose()关闭字符输入流,并释放与之关联的所有资源 8.4.2 实例化:FileReader(读取) package aaa; import java.io.File; import java.io.FileReader; public class FileInAndOut { public static void main(String[] args) { //定义指定磁盘的文件的File对象 File file = new File("D://word.txt"); if(! file.exists()){ System.out.println("对不起,不包含指定路径的文件"); }else{ //根据指定路径的File对象创建FileReader对象 try { FileReader fr = new FileReader(file); char[] data = new char[23]; //定义char数组 int length = 0; while((length = fr.read(data))>0){ //循环读取文件中的数据 String str = new String(data,0,length); //根据读取文件的内容创建String 对象 System.out.println(str); //输出读取内容 } fr.close(); //关闭流 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } 8.4.3 抽象类:Writer(写入)

方法:

返回方法说明voidwrite(char[ ] cbuf)将字符数组的数据写入字符输出流Abstract voidwrite(char[ ] cbuf int off ,int len)将字符数组从下标off 开始向输入流写入长度为len的数据voidwrite(int c )向字符输入流中写入一个字符数据voidwrite(String str )向输入流中写入一个字符串数据voidwrite(String str , int off ,int len)向输入流中写入一个字符串从off 开始长度为len的数据Abstract voidflush()刷新当前输出流,并强制写入所有缓冲区的字节数据voidclose()向输出流中写入缓冲区的数据,然后关闭当前输出流,释放所有与当前输出流相关联的系统资源 8.4.4 实例化:FileWriter (1)覆盖式写入:

【和字节流中的一样】

FileWriter fw = new FileWriter(file);  

package aaa; /** * 通过给定的String类型参数的指定文件名称与路径,创建FileWriter类 */ import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class FileWriterDemo { public static void main(String[] args) { File file = new File("D://4.txt"); //创建指定文件 try { if(! file.exists()){ file.createNewFile(); //如果指定文件不存在,新建文件 } FileReader fr = new FileReader("D://4.txt"); FileWriter fw = new FileWriter(file); //创建FileWriter对象 fw.write("12345"); //向文件写入数据 fw.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } (2)续写式写入:

FileWriter fw = new FileWriter(file,true);  



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3