您的位置:首页 > 编程语言 > Java开发

java文件io

2013-10-30 09:05 176 查看
1.构造方法可以用来生成 File 对象:

File(String directoryPath)

这里,directoryPath 是文件的路径名。

File 定义了很多获取 File 对象标准属性的方法。例如:getName( )用于返回文件

名,getParent( )返回父目录名,exists( )方法在文件存在的情况下返回 true,反之返回false。然而 File 类是不对称的,意思是虽然存在可以验证一个简单文件对象属性的很多方法,但是没有相应的方法来改变这些属性.

2.RandomAccessFile 可以以只读或读写方式打开文件, 具体使用哪种方式取决于用户创建 RandomAccessFile 类对象的构造方

法:

new RandomAccessFile(f,"rw"); //  读写方式

new RandomAccessFile(f,"r"); //  只读方式

注意:

当程序需要以读写的方式打开一个文件时,如果这个文件不存在,程序会自动创建此文件。

3.String.substring(int beginIndex,int endIndex)方法可以用于取出一个字符串中的部分子字符串,但要注意的一个细节是:子字符串中的第一个字符对应的是原字符串中的脚标为 beginIndex 处的字符,但最后的字符对应的是原字符串中的脚标endIndex-1 处的字符,而不是 endIndex 处的字符。

4.流类

Java 的流式输入/输出建立在四个抽象类的基础上:InputStream, OutputStream,

Reader 和 Writer。它们用来创建具体流式子类。尽管程序通过具体子类执行输入/输出

操作,但顶层的类定义了所有流类的基本通用功能。

InputStream 和 OutputStream 设计成字节流类。Reader 和 Writer 为字符流设计。

字节流类和字符流类形成分离的层次结构。一般说来,处理字符或字符串时应使用字

符流类,处理字节或二进制对象时应用字节流类。

一般在操作文件流时,不管是字节流还是字符流都可以按照以下的方式进行:

(1) 使用 File  类找到一个文件

(2) 通过 File  类的对象去实例化字节流或字符流的子类

(3) 进行字节(字符)的读、写操作

(4) 关闭文件流

5.FileInputStream(文件输入流)

FileInputStream 类创建一个能从文件读取字节的InputStream 类, 它的两个常用的

构造方法如下:

FileInputStream(String filepath)

FileInputStream(File fileObj)

这两个构造方法都能引发FileNotFoundException异常。这里,filepath 是文件的绝

对路径,fileObj是描述该文件的File对象。

6.FileOutputStream(文件输出流)

FileOutputStream 创建了一个可以向文件写入字节的类 OutputStream,它常用的构造方法如下:

FileOutputStream(String filePath)

FileOutputStream(File fileObj)

FileOutputStream(String filePath, boolean append)

它们可以引发 IOException 或 SecurityException 异常。这里 filePath 是文件的绝对路径,fileObj 是描述该文件的 File 对象。如果 append 为 true,文件则以设置搜索路径模式打开。FileOutputStream 的创建不依赖于文件是否存在在创建对象时,

FileOutputStream 会在打开输出文件之前就创建它。 这种情况下如果试图打开一个只读文件,会引发一个 IOException 异常。

7.System.in 和 System.out

为了支持标准输入输出设备,Java 定义了两个特殊的流对象:System.in 和

System.out。System.in 对应键盘,是 InputStream 类型的,程序使用 System.in 可以读

取从键盘上输入的数据;System.out 对应显示器,是 PrintStream 类型的,PrintStream

是 OutputStream 的一个子类,程序使用 System.out 可以将数据输出到显示器上。键盘

可以被当作一个特殊的输入流,显示器可以被当作一个特殊的输出流。

8.InputStreamReader 和 OutputStreamWriter, 这两个类是字节流和字符流之间转换的类,InputStreamReader 可以将一个字节流中的字节解码成字符,OuputStreamWriter 将写入的字符编码成字节后写入一个字节流。

InputStreamReader  有两个主要的构造函数:

InputStreamReader(InputStream in)

// 用默认字符集创建一个 InputStreamReader 对象

InputStreamReader(InputStream in,String CharsetName)

// 接受已指定字符集名的字符串,并用该字符集创建对象

OutputStreamWriter  也有对应的两个主要的构造函数:

OutputStreamWriter(OutputStream in)

// 用默认字符集创建一个 OutputStreamWriter 对象

OutputStreamWriter(OutputStream in,String CharsetNarme)

// 接受已指定字符集名的字符串,并用该字符集创建 OutputStreamWriter 对象

为了达到最高的效率,避免频繁地进行字符与字节间的相互转换,最好不要直接

使用这两个类来进行读写,应尽量使用 BufferedWriter 类包装 OutputStreamWriter 类,用 BufferedReader 类包装 InputStreamReader 类。例如:

BufferedWriter out=new BufferedWriter(newOutputStreamWriter(System.out));

BufferedReader in=new BufferedReader(new InputStreamReader(System.in));

接着从一个实际的应用中来了解 InputStreamReader 的作用, 怎样用一种简单的方

式一下子就读取到键盘上输入的一整行字符呢?只要用下面的两行程序代码就可以

解决这个问题:

BufferedReader in=new BufferedReader(new InputStreamReader(System.in));

String strLine = in.readLine();

可见,构建 BufferedReader 对象时,必须传递一个 Reader 类型的对象作为参数,

而键盘对应的 System.in 是一个 InputStream 类型的对象,所以这里需要用到一个

InputStreamReader 的转换类, 将 System.in 转换成字符流之后, 放入到字符流缓冲区之中,之后从缓冲区中每次读入一行数据。

【 格式 10-1 由键盘输入数据基本形式 】

import java.io.*;

public class class_name  // 类名

{

public static void main(String args[]) throws IOException

{

BufferedReader buf;  // 声明 buf 为 BufferedReader 类的变量

String str;  // 声明 str 为 String 类型的变量

... ...

buf=new BufferedReader(new InputStreamReader(System.in));

str=buf.readLine();  // 读入字符串至 buf

... ...

}

}

9.使用 String 类中的 get Bytes()方法,为字符进行编码转换。

例:

 // 在这里将字符串通过 getBytes()方法,编码成 GB2312

byte b[] = "大家一起来学 Java 语言".getBytes("GB2312") ;

10.对象序列化

所谓的对象序列化(在某些书中也叫串行化) ,是指将对象转换成二进制数据流

的一种实现手段,通过将对象序列化,可以方便的实现对象的传输及保存。

在 Java 中提供了 ObjectlnputStream 与 ObjectOutputStream 这两个类用于序列化对

象的操作。这两个类是用于存储和读取对象的输入输出流类,不难想象,只要把对象

中的所有成员变量都存储起来,就等于保存了这个对象,之后从保存的对象之中再将

对象读取进来就可以继续使用此对象。ObjectInputStream 与 ObjectOutputStream 类,可以帮开发者完成保存和读取对象成员变量取值的过程,但要求读写或存储的对象必

须实现了 Serializable 接口, 但 Serializable 接口中没有定义任何方法, 仅仅被用作一种标记,以被编译器作特殊处理.

11.如果不希望类中的属性被序列化,可以在声明属性之前

加上 transient 关键字。如下所示,下面的代码修改自前面所用到的 Person.java 程序,

在声明属性时,前面多加了一个 transient 关键字。

04  private transient String name ;

05  private transient int age ;

再此运行 SerializableDemo.java 程序时,其输出结果为:

姓名:null ,年龄:0

由输出结果可以发现,Person 类中的两个属性并没有被保存下来,输出时,是直

接输出了其默认值。

12.

1、 Java 中要进行 IO 操作,需要导入 java.io 包。

2、 Java 中的 File 类是唯一操作磁盘文件的类。

3、 Java 中的数据操作主要分为两种:

(1) 、 字节流(OutputStrea、InputStream)

(2) 、 字符流(Writer、Reader)

这四个类都是抽象类,使用时,都必须依靠其子类实例化。

4、 Java 定义了两个特殊的流对象:System.in 和 System.out。System.in 对应键盘,是

InputStream 类型的, 程序使用 System.in 可以读取从键盘上输入的数据;System.out

对应显示器,可以向显示器上输出内容。

5、 InputStreamReader 和 OutputStreamWriter, 这两个类是字节流和字符流之间转换的

类, InputStreamReader 可以将一个字节流中的字节解码成字符, OuputStreamWriter

将写入的字符编码成字节后写入一个字节流。

6、 一个类实现了 Serializable 接口之后,此类的对象可以被序列化,就表示可以保存

在文件之中、或网络传输之中。如果不希望类中的某个属性被保存下来,可以用

transient 关键字声明属性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java io