java流入流出实验小结,Java实验五 IO流的一般使用

本文详细介绍了Java中的IO流,包括输入流、输出流、字节流、字符流、节点流和处理流等概念,以及FileInputStream、FileOutputStream、RandomAccessFile等类的使用。还探讨了缓冲流、转换流、数据流和对象序列化等高级特性,并提供了多个示例代码,展示了如何在实际编程中操作文件和进行数据传输。
摘要由CSDN通过智能技术生成

{

rf2.seek(l*4);

x1 = rf2.readInt();

System.out.println(x1);

}

rf2.close();

System.out.print("请输入第一个字符串:");

rf3.seek(rf3.length());

while ((str = buf.readLine()) != null) {

System.out.println("请输入另一个字符串,按Ctrl+Z结束:");rf3.writeUTF(str);//写入myfile3.txt中

}

rf3.seek(0);

while (rf3.getFilePointer() < rf3.length()) {

System.out.println(rf3.readUTF());//从myfile3.txt中读出字符串并输出在控制台上

}

rf3.close();

System.out.println("完成");

}

}

三、实验报告要求

1.回答第1题【思考问题】提出的问题。

2.写出第二题要求的源程序。

JAVA IO流总结

一、IO流的三种分类方式

1.按流的方向分为:输入流和输出流

2.按流的数据单位不同分为:字节流和字符流

3.按流的功能不同分为:节点流和处理流

二、IO流的四大抽象类:

字符流:Reader Writer

字节流:InputStream(读数据)

OutputStream(写数据)

三、InputStream的基本方法

int read() throws IOException 读取一个字节以整数形式返回,如果返回-1已到输入流的末尾

void close() throws IOException 关闭流释放内存资源

long skip(long n) throws IOException 跳过n个字节不读

四、OutputStream的基本方法

void write(int b) throws IOException 向输出流写入一个字节数据

void flush() throws IOException 将输出流中缓冲的数据全部写出到目的地

五、Writer的基本方法

void write(int c) throws IOException 向输出流写入一个字符数据

void write(String str) throws IOException将一个字符串中的字符写入到输出流void write(String str,int offset,int length)

将一个字符串从offset开始的length个字符写入到输出流

void flush() throws IOException

将输出流中缓冲的数据全部写出到目的地

六、Reader的基本方法

int read() throws IOException 读取一个字符以整数形式返回,如果返回-1已到输入流的末尾

七、节点流类型

八、访问文件之FileInputStream和FileOutputStream继承基类用于向文件中输入输出字节

九、访问文件之FileReader和FileWriter继承基类用于向文件中输入输出字符

----输出流在构造函数第二个参数可以设置true意义为跟在已有文件后进行输入

----此类流会抛出FileNotFoundException需要对其进行显示捕捉

十、缓冲流:缓冲流要套接在相应的节点流之上,提高了读写的效率。

此处理流的构造方法都得传相对应的基类类型

BufferedReader:提供了readLine方法用于高校读取一行字符串

BufferedWriter:提供了newLine用于写入一个行分隔符也就是换行

BufferedInputStream 没多大用处

BufferedOutputStream 没多大用处

十一、转换流:主要作用将字节流转换成字符流。用处较大!转换流在构造时可以指定其编码集合

InputStreamReader需要和InputStream套接

OutputStreamWriter需要和OutputStream套接

例:OutputStreamWriter osw = new OutputStreamWriter (new FileOutputStream(文件路径);

方法例:osw.getEncoding(); 获得流的编码方式

十二、数据流与字节数组流:

数据流主要为实现可以存取Java原始数据类型如long,boolean

数据流是字节流

DataInputStream需要和InputStream套接

DataOutputStream需要和OutputStream套接

DataInputStream方法:readBoolean() readInt() read……()……

readUTF():网络传输常用方法 读一个Unicode字符串

DataOutputStream方法与DataInputStream基本对应为写的方法

//此构造函数等于已可以往一个字节数组里输入内容

ByteArrayOutputStream baos = new ByteArrayOutputStream ();

//此方法为获取一个字节数组方法返回字节数组

baos.toByteArray();

//此方法获取字节数组占了多少字节

new ByteArrayInputStream(一个字节数组)。available()

1ByteArrayOutputStream baos =

2new ByteArrayOutputStream();

3DataOutputStream dos =

4new DataOutputStream(baos);

5try {

6dos.writeDouble(Math.random());

7dos.writeBoolean(true);

8ByteArrayInputStream bais =

9new ByteArrayInputStream(baos.toByteArray());

10System.out.println(bais.available());

11DataInputStream dis = new DataInputStream(bais);

12System.out.println(dis.readDouble());

13System.out.println(dis.readBoolean());

14dos.close();dis.close();

15} catch (IOException e) {

16e.printStackTrace();

17}

十三、Print流

Print流只有输出流无输入流,PrintWriter和PrintStream分别针对字符字节两个类提供了重载的Print和Println方法用于多种数据类型的输出

PrintWriter和PrintStream的输出操作不会抛出异常

PrintWriter和PrintStream有自动flush功能

----System.setOut(接收OutputStream类):用于设置系统默认输出流

十四、Object流

等同于c#序列化,用直接将Object写入或读出

transient关键字为不序列化此成员变量

需要序列化的类必须实现Serializable接口

主要方法:writeObject(Object); readObject();

读出为Object类型需要强转数据类型

1 import java.io.*;

3 public class TestObjectIO {

4public static void main(String args[]) throws Exception {

5T t = new T();

6t.k = 8;

7FileOutputStream fos = new FileOutputStream("d:/share/java/io/testobjectio.dat");8ObjectOutputStream oos = new ObjectOutputStream(fos);

9oos.writeObject(t);

10oos.flush();

11oos.close();

12

13FileInputStream fis = new FileInputStream("d:/share/java/io/testobjectio.dat"); 14ObjectInputStream ois = new ObjectInputStream(fis);

15T tReaded = (T)ois.readObject();

16System.out.println(tReaded.i + " " + tReaded.j + " " + tReaded.d + " " + tReaded.k); 17

18}

19 }

20

21 class T

22implements Serializable

23 {

24int i = 10;

25int j = 9;

26double d = 2.3;

27transient int k = 15;

28 }

实验12:Java高级I/O流程序设计

实验时间:实验地点:

一、实验目的及要求

(1)掌握文件类File的使用。

(2)理解随机存取文件类RandomAccessFile的使用。

二、实验设备环境及要求

三、实验任务

(1)按要求编写Java Application程序,并编译、运行这个程序。

四、实验内容与步骤

1.输出当前目录下my.txt文件的基本信息。

import java.io.*;

import java.util.*;

public class FileTest{

public static void main(String args[]){File f=new File("my.txt"); System.out.println("Absolute path: " + f.getAbsolutePath() +"\n Can read: " + f.canRead() +"\n Can write: " + f.canWrite() +"\n getName: " + f.getName() +"\n getParent: " + f.getParent() +"\n getPath: " + f.getPath() +"\n length: " + f.length() +"\n lastModified: " + new Date(f.lastModified()));if(f.isFile())System.out.println("It's a file");

}}else if(f.isDirectory())System.out.println("It's a directory");

2.编写一个Java Application程序,实现如下的设计功能:运行该程序可以列出当前目录下的文件。

import java.io.*;

class FileDir{

public static void main(String args[]){

File f=new File("D:\\");

File fs[]=f.listFiles();

for(int i=0;iif(fs[i].isFile())

System.out.println(fs[i].getName());

else

System.out.println(""+fs[i].getName());

}

}

}

五、实验指导与处理

六、分析讨论

实验教师评语成绩

签名:

日期:

java 中io流概念

1.流的概念源于unix中管道(pipe)的概念,在unix中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备,外部文件等。

2.一个流,必有源端和目的端,它们可以是计算机内存的某些区域,也可以是磁盘文件,甚至可以是internet上的某个url。

3.流的方向很重要,根据流的方向,流可分为两类:输入流和输出流。用户可以从输入流中读取信息,但不能写它。相反,对输出流,只能往输出流写,而不能读它。

4.实际上,流的源端和目的端可简单的看成是字节的生产者和消费者,对输入流,可不必关心它的源端是什么,只要简单地从流中读数据,而对输出流,也可不知道它的目的端只是简单的往流中写数据。

5.形象比喻,文件和程序之间连接一个管道,水流就在之间形成了,自然也就出现了方向:可以流进,也可以流出。流就是管道里的流水,这个管道连接了文件和程序。

6.java.io包中的类对应两类流:1.一类流直接从指定的位置(如磁盘文件或者内存区域)读或写,这类流称为结点流(nodestream)其他的流则称为过滤器(filters)。过滤器输入流往往是以其他输入流作为它的输入源,经过过滤或处理后在以新的输入流的形式提供给用户,过滤器输出流的原理也类似。

7.java的常用输入、输出流java.io包中的stream类根据它们操作对象的类型是字符还是字节分为两大类:字符流和字节流。

8.java的字节流inputstream是所有字节输入流的祖先,而outputstream是所有字节输出流的祖先。

9.java的字符流,reader是所有读取字符输入流的祖先,而writer是所有输出字符流的祖先。

10.关于字节流和字符流的区别:实际上字节流在操作的时候本身是不会用到缓冲区的,是文件本身的直接操作的,但是字符流在操作的时候是会用到缓冲区的,是通过缓冲区来操作文件的。(所有有时需要刷新缓冲区)。

11.使用字节流比使用字符流好,首先因为硬盘上的所有文件都是以字节的形式进行传输或者保存,包括图片等内容,但是字符只是在内存中才会形成,所以在开发中,字节流使用广泛。

12.对象序列化就是把一个对象变为二进制数据流的一种方法,一个类要想被序列化,就先必须实现java.io.serializable接口,虽然这个接口中没有任何方法就如同之前的cloneable接口一样,实现了这个接口之后,就表示这个类具有被序列化的能力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值