文章原本是写给我们同学作为考试复习用的,
所以有些地方显的比较功利也有点不求甚解。
适合初学者。
有什么不对的地方请一定指出:-)
本来是WORD的,在这里,只能牺牲格式了:-(
JAVA 的IO包
针对考试,我认为同学们只需掌握JAVA IO包的基本用法,应该就可以应付有余了。下面
是本文将涉及到的IO类。
1.File
2.xxxStream
xxxReader
xxxWriter
3.串行化(Serialize)
File类
File这个类的名字起的不太好。当然跟JAVA里面有很多其它坏名字比起来它已经算是比
较好的了:-)
我们刚接触到File的时候,会很自然的以为这个类的对象就是磁盘上的一个文件,还会
很自然的想到这个类大概能提供读取、写入等各种功能。而事实却完全不是如此,这些
读写功能都是由后面讲的Reader/Writer/Stream来提供的。
所以请注意:
1.File类的对象根本不是磁盘上的某个文件,也不是某个目录
2.File类根本不提供读写文件内容的方法
我们把File类理解成FileSystem(文件系统)说不定更合适,因为File提供:
1.列出磁盘根目录的方法(比如 C: D: E:…)
2.列出某个目录下所有文件/目录的方法
3.判断某文件/目录各种属性(只读、隐藏…)的方法
4.新建目录结构、删除目录结构的方法
5.新建空文件、删除文件的方法
看看上面的功能,差不多你只要有这样一个File类,就可以实现很多DOS的一般功能了,
比如:dir, del, deltree, md(mkdir), rd(remove dir)等,是不是想试一下呢?或者
如果你掌握了Swing,差不多可以用File搭配Swing来做一个类似Windows的资源管理器了
。
如果为了应付考试,你可能需要掌握上述2、3所涉及的功能。我们举两个例子说一下:
判断文件系统上指定位置(如C:\a.txt)是否存在文件:
·新建一File对象: File target=new File("C:\\a.txt");
·用File类的exists来判断: if (target.exists()). . .
判断某个指定名称的文件/目录(如C:\a.txt)是文件,还是目录
·先用前面方法确定"C:\\a.txt"存在,去判断不存在的东西是文件/目录,就很不符合
逻辑了,我曾经看到不少同学有这样的问题。比如
File cur=new File(strName);
If (cur.isDirectory()). . .
而他上面的strName包含了一个错误的文件绝对路径。这样判断出来的结果有什么用处呢
?
·然后用File的isDirectory()来判断是否目录
别以为C:\a.txt一定是文件哦!去新建一个试试,完全可以是目录的。所以正确的写法
可能是这样的:
File cur=new File(strName);
If (cur.exists()){
If (cur.isDirectory()). . .
}else{
System.err.println("No Such File/Dir!")
}
更多其它代码请见附件FileTest.java。
其中包含了演示前面1-5所有功能的代码。
InputStream/OutputStream/Reader/Writer类
JAVA的IO包包括很大堆的输入输出类,运用他们可以完成向 Stdio、文件、网络读写文
本、数据、对象。
1.读写文本类型的文件,建议一般建议使用Reader/Writer一线的类。
oReader/Writer是在Stream之后为了弥补Stream对于双字节字符支持的不足而推出的。
所以,读写文本一般都应该使用Reader/Writer。特别是:
o读入文本时,用BufferedReader类的readLine方法,一下可以读一行,非常方便好用。
o写出文本时,用PrintWriter类的println方法,一下子可以写出一个字符串并且换行。
例,读文本文件:
FileReader fin=new FileReader("C:\\a.txt");
BufferedReader in=new BufferedReader(fin);
String line=in.readLine();
当然,我更愿意写的再简单些,比如这样:
BufferedReader in=new BufferedReader(new FileReader("C:\\a.txt"));String lin
e=in.readLine();
写文本文件:
PrintWriter out=new PrintWriter(new FileWriter("C:\\a.txt"));
out.println("hi this is a line.");
2.读写Standard IO
注:
System.in 是一个 InputStream 对象
System.out 是一个 PrintStream 对象
o读键盘输入,理论上说也是在读文本文件,似乎该使用1的办法才对,但是由于System
.in这个键盘输入对象并不是一个Reader系列的对象,而是Stream类的,所以当我们要一
行行读入键盘输入时,反而会要更麻烦些,需要先用System.in来构造一个Reader对象(
InputStreamReader),之后才能用BufferedReader来一行行读
例:
InputStreamReader rin=new InputStreamReader(System.in);
BufferedReader in=new BufferedReader(rin);
String line=in.readLine();
o屏幕输出System.out是PrintStream类的对象,此类本身提供了println这样的格式化输
出方法,使用很方便,相信大家都没有什么问题。我就不专门举例了。
3.读写数据 DataInput/OutputStream
程序中的用到的一些数据有时需要保存到文件中,比如一个整数数组,或者一个Double
数组,等。保存这些数据办法有两个:
一是将数据储存到文本文件中,使用1中描述的方法,但是缺点是程序再次读入这些数据
时,由于文本文件中没有纪录具体的数据类型,所以需要费些劲将字串转回原来的整形
、Double型。
还有一个办法就是使用DataOutputStream直接将数据以二进制的形式,保存到文件中,
之后可以用DataInputStream直接将被保存的数据读入,比上面的办法好用不少。但是这
样的办法的坏处是:因为是二进制保存,用户不能绕过程序直接编辑文件以修改保存下
来的数据,程序也不能读入用户手写的数据。
我们来看读入输出的具体方法:
输出:DataOutputStream 类的 writeInt (or writeDouble...)
输入:DataInputStream 类的readInt (or readDouble...)
例:
double[] array={1.2,2.0,3.4,5.3,5.43,6.456,5.4};
// write to file
DataOutputStream out=new DataOutputStream(new FileOutputStream("C:\\a.dat")
);
for (int i=0;i<array.length;i++)
out.writeDouble(array[i]);
out.close();
// read in again to make sure everything's ok
DataInputStream in=new DataInputStream(new FileInputStream("C:\\a.dat"));
for (int i=0;i<array.length;i++)
System.out.println(in.readDouble());
串行化(Serialize)
引入:
我们曾经做过一个编写描述学校情况的程序。你的程序里很可能有一些"学校"、"教室"
、"老师"等类。程序第一次运行时,很自然,你可能new了一个学校的对象,然后让用户
输入一个个的老师的姓名、年龄等。每收集完一个老师的情况,你可能就在程序里又NE
W一个新的"老师"的对象。好了!终于,用户辛辛苦苦的输入了200个学生,30个老师的
所有信息,你的程序里也有了200个学生对象,30个老师对象。
然后呢?
然后用户说:退出程序,并且很自然的假设下次他再次运行你的程序时,那些学生和老
师都仍然存在。
但是你在遍那道题的时候,有没有想到要保存这些"学生"和"老师"对象的信息呢?如果
想到要保存的话,你又怎么保存他们的呢?
一个傻办法是:写一个文本文件,将每个人的姓名、年龄、学号等对象的细节,一个个
写到文本文件里,然后下次全部读进来。缺是:太麻烦!
另一个办法就是:串行化,一次能把整一个对象写到文件中。代码量能少很多。
既然知道串行化好,怎么用呢?
o写出
1.事先确定需要串行化的类是什么,在类声明中加一句Implement Serializable
2.新建FileOutputStream(或者其它类型的OutputStream)指定将对象写到哪里去
3.新建ObjectOutputStream用它来的writeObject写出对象
例:
class Teacher implements serializable{
....
}
//.....
Teacher[] teachers=new Teacher[30];
// 让别人输入东西,把30个教师填好。
//. . . . . .
FileOutputStream f=new FileOutputStream("c:\\a.ser");
ObjectOutputStream out=new ObjectOutputStream(f);
for (int i=0;i<30;i++)
out.writeObject(teachers[i]);
o读入
从外部读入以前串行化的对象时,要注意:原先保存到文件时,虽然保存了对象的所有
属性,但是唯独丢失了对象的类信息。所以重新读入时,一个Teacher会变成一个Objec
t,这时你必须手动的将此Object类对象强制转型成Teacher才能正常使用:
FileInputStream in=new FileInputStream("c:\\a.ser");
ObjectInputStream out=new ObjectInputStream(f);
for (int i=0;i<30;i++)
teachers[i]=(Teacher)out.readObject();
上面就是一些简单的JAVA IO的情况。预祝大家都顺利PASS!
由于自己水平有限,如果上面写的地方有任何不足和纰漏,请一定告诉我以便及时更正
分享到:
相关推荐
Java IO应届生培训讲义是一份面向刚毕业的大学生进行Java IO相关知识的培训资料,它涵盖了Java IO的基础知识、不同的IO模型以及Java中的BIO、NIO和AIO高级IO类库。下面详细解释这些知识点: 1. 用户空间和内核空间 ...
Java IO(Input/Output)是Java编程语言中用于处理输入输出操作的重要部分,涉及文件、网络、内存等数据传输。本文将深入探讨Java IO的基本概念、分类、选择流的策略以及常用的流类型。 首先,File类是Java IO的...
java IO教程,java IO教程,java IO教程,java IO教程java IO教程java IO教程java IO教程java IO教程,java IO教程java IO教程java IO教程java IO教程java IO教程,java IO教程,java IO教程,java IO教程,java IO...
Java IO(Input/Output)是Java编程语言中用于处理输入和输出操作的重要组成部分。它提供了一整套类库,使得开发者能够有效地读取和写入数据到不同的源和目标,如文件、网络、内存缓冲区等。Java IO体系结构设计得...
Java IO(Input/Output)是Java编程语言中用于处理输入输出操作的基础框架,它提供了丰富的类库,使得程序能够与各种设备、文件、网络进行数据交互。然而,传统的IO模型在处理大量并发连接时表现出效率较低的问题,...
《Java IO.chm》是一个关于Java输入/输出(IO)技术的压缩文件,其中包含了丰富的资料,适合开发者深入理解和学习Java IO系统。这篇详细的总结将围绕Java IO体系结构、核心类、流的概念、缓冲区、转换流、字符集、...
Java IO 详解 Java IO(Input/Output)是 Java 语言中用于处理输入输出操作的类库,提供了大量的类和方法来实现文件、网络、字节流等方面的输入输出操作。下面对 Java IO 中的重要知识点进行详细说明。 一、File ...
Java IO处理类是Java平台中用于输入输出操作的核心部分,它允许程序与各种类型的输入源(如文件、网络连接)以及输出目标(如显示器、打印机)进行交互。本篇文章将全面解析Java IO处理类,包括基本概念、常用类库、...
Java IO编程是Java平台中处理输入输出操作的重要组成部分,它提供了丰富的类库,使得开发者能够高效地进行数据的读取、写入、流的管理和转换。在这个集合中,我们主要探讨的是Java IO在文件读写方面的实践应用。 一...
Java IO流技术是Java平台中用于处理输入输出的重要机制,其核心在于数据的传输,从数据源到程序或从程序到目的地。在Java中,流分为两大类:输入流(InputStream、Reader)和输出流(OutputStream、Writer)。输入流...
在“JavaIODemo”这个示例中,可能会包含以上提到的一些或全部Java IO操作的代码实例,通过这些实例,我们可以学习如何在实际项目中应用Java IO API。实践是掌握Java IO的最佳方式,通过对这些示例的分析和运行,...
Java IO(Input/Output)是Java编程语言中用于处理输入和输出操作的重要组成部分。它提供了丰富的类库,允许程序员在程序之间传输数据,包括从文件、网络、内存缓冲区到其他程序或系统组件。Java IO API是Java平台的...
JavaIO流详解归纳 Java 的核心库 java.io 提供了全面的 IO 接口,包括文件读写、标准设备输出等。Java 中 IO 是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入。在项目开发中,IO 是非常...
Java IO操作是Java编程中的重要组成部分,主要用于处理输入和输出数据。在Java中,IO操作涉及到文件、字节流、字符流以及管道流等多个概念。下面将详细解释这些知识点。 首先,我们来看“文件类”。在Java中,`java...
Java IO 与 装饰模式 在Java编程中,输入输出(IO)处理是程序设计中的重要组成部分,用于读取、写入和处理数据。Java IO库提供了一整套类来支持各种类型的输入输出操作,包括文件、网络、内存等。而装饰模式是一种...
2、常用21个IO流:FileWriter、FileReader、...3、JAVA IO流经典代码示例,示例从易到难。代码功能涉及字节、字符、字符串、文本文件、图片、音频、视频。演示错误用法和经典用法。 4、代码的结构可查看README文件。
Java IO流是Java平台中的重要组成部分,用于处理输入和输出操作。它允许程序与外部设备如硬盘、网络、内存等进行数据传输。IO流的概念基于流(Stream)模型,数据以字节或字符序列的形式流动。Java IO库提供了丰富的...
Java IO流是Java编程语言中处理输入输出操作的重要部分,尤其在数据传输、文件读写等方面发挥着核心作用。本文将深入探讨Java IO流的基本概念、类型以及它们在实际开发中的应用。 首先,理解IO流的基本概念至关重要...
Java IO(Input/Output)是Java平台中处理输入与输出数据的核心部分,它提供了丰富的类库,使得开发者能够高效地进行文件、网络、内存以及其他I/O流的操作。本篇文章将全面解析Java IO工具类,帮助你理解并掌握其在...