`
thirtysix
  • 浏览: 36558 次
  • 性别: Icon_minigender_1
  • 来自: 河北承德
社区版块
存档分类
最新评论

JAVA IO

阅读更多
文章原本是写给我们同学作为考试复习用的,
所以有些地方显的比较功利也有点不求甚解。
适合初学者。
有什么不对的地方请一定指出:-)
本来是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!
由于自己水平有限,如果上面写的地方有任何不足和纰漏,请一定告诉我以便及时更正
 
 
分享到:
评论
1 楼 wangdi 2009-01-08  
很像培训老师讲的东东。。

相关推荐

    Java IO应届生培训讲义

    Java IO应届生培训讲义是一份面向刚毕业的大学生进行Java IO相关知识的培训资料,它涵盖了Java IO的基础知识、不同的IO模型以及Java中的BIO、NIO和AIO高级IO类库。下面详细解释这些知识点: 1. 用户空间和内核空间 ...

    Java IO知识点

    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教程,java IO教程,java IO...

    java io 结构图

    Java IO(Input/Output)是Java编程语言中用于处理输入和输出操作的重要组成部分。它提供了一整套类库,使得开发者能够有效地读取和写入数据到不同的源和目标,如文件、网络、内存缓冲区等。Java IO体系结构设计得...

    Java IO_NIO

    Java IO(Input/Output)是Java编程语言中用于处理输入输出操作的基础框架,它提供了丰富的类库,使得程序能够与各种设备、文件、网络进行数据交互。然而,传统的IO模型在处理大量并发连接时表现出效率较低的问题,...

    java IO.chm

    《Java IO.chm》是一个关于Java输入/输出(IO)技术的压缩文件,其中包含了丰富的资料,适合开发者深入理解和学习Java IO系统。这篇详细的总结将围绕Java IO体系结构、核心类、流的概念、缓冲区、转换流、字符集、...

    Java教程之javaIO详解

    Java IO 详解 Java IO(Input/Output)是 Java 语言中用于处理输入输出操作的类库,提供了大量的类和方法来实现文件、网络、字节流等方面的输入输出操作。下面对 Java IO 中的重要知识点进行详细说明。 一、File ...

    Java IO处理类的汇总

    Java IO处理类是Java平台中用于输入输出操作的核心部分,它允许程序与各种类型的输入源(如文件、网络连接)以及输出目标(如显示器、打印机)进行交互。本篇文章将全面解析Java IO处理类,包括基本概念、常用类库、...

    Java IO 编程集合

    Java IO编程是Java平台中处理输入输出操作的重要组成部分,它提供了丰富的类库,使得开发者能够高效地进行数据的读取、写入、流的管理和转换。在这个集合中,我们主要探讨的是Java IO在文件读写方面的实践应用。 一...

    JAVA IO流技术

    Java IO流技术是Java平台中用于处理输入输出的重要机制,其核心在于数据的传输,从数据源到程序或从程序到目的地。在Java中,流分为两大类:输入流(InputStream、Reader)和输出流(OutputStream、Writer)。输入流...

    Java IO 使用例

    在“JavaIODemo”这个示例中,可能会包含以上提到的一些或全部Java IO操作的代码实例,通过这些实例,我们可以学习如何在实际项目中应用Java IO API。实践是掌握Java IO的最佳方式,通过对这些示例的分析和运行,...

    java io.pdf

    Java IO(Input/Output)是Java编程语言中用于处理输入和输出操作的重要组成部分。它提供了丰富的类库,允许程序员在程序之间传输数据,包括从文件、网络、内存缓冲区到其他程序或系统组件。Java IO API是Java平台的...

    JavaIO流详解归纳.pdf

    JavaIO流详解归纳 Java 的核心库 java.io 提供了全面的 IO 接口,包括文件读写、标准设备输出等。Java 中 IO 是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入。在项目开发中,IO 是非常...

    javaIo操作的基础代码

    Java IO操作是Java编程中的重要组成部分,主要用于处理输入和输出数据。在Java中,IO操作涉及到文件、字节流、字符流以及管道流等多个概念。下面将详细解释这些知识点。 首先,我们来看“文件类”。在Java中,`java...

    Java IO 与 装饰模式

    Java IO 与 装饰模式 在Java编程中,输入输出(IO)处理是程序设计中的重要组成部分,用于读取、写入和处理数据。Java IO库提供了一整套类来支持各种类型的输入输出操作,包括文件、网络、内存等。而装饰模式是一种...

    JAVA IO流缓冲字节流缓冲字符流等流经典代码示例加注释总结.rar

    2、常用21个IO流:FileWriter、FileReader、...3、JAVA IO流经典代码示例,示例从易到难。代码功能涉及字节、字符、字符串、文本文件、图片、音频、视频。演示错误用法和经典用法。 4、代码的结构可查看README文件。

    java io流 案例

    Java IO流是Java平台中的重要组成部分,用于处理输入和输出操作。它允许程序与外部设备如硬盘、网络、内存等进行数据传输。IO流的概念基于流(Stream)模型,数据以字节或字符序列的形式流动。Java IO库提供了丰富的...

    java io流学习笔记1

    Java IO流是Java编程语言中处理输入输出操作的重要部分,尤其在数据传输、文件读写等方面发挥着核心作用。本文将深入探讨Java IO流的基本概念、类型以及它们在实际开发中的应用。 首先,理解IO流的基本概念至关重要...

    Java IO 工具类大全

    Java IO(Input/Output)是Java平台中处理输入与输出数据的核心部分,它提供了丰富的类库,使得开发者能够高效地进行文件、网络、内存以及其他I/O流的操作。本篇文章将全面解析Java IO工具类,帮助你理解并掌握其在...

Global site tag (gtag.js) - Google Analytics