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 关键字声明属性。
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 - 简单的文件copy程序
- 文件路径正确,报java.io.FileNotFoundException异常
- JAVA对于TXT文件读写-IO操作例子
- Java IO之一读取文件
- 使用java.io.*操作文件的拆分与合并,Application一例
- Java IO学习【3】IO中异常的抛出/单个字符读取文件、数组读取字符文件
- Java基础--IO-列出目录下所有文件
- Java IO,io,文件操作,删除文件,删除文件夹,获取文件父级目录
- java IO体系中读取文件文本文件中内容
- java io 写文件,包括追加写文件
- JAVA IO分析三:IO总结&文件分割与合并实例
- java io 流,批量读写文件
- java io追加內容到文件末尾的几种方法
- JAVA IO - 文件再命名
- Java 流(Stream)、文件(File)和IO
- java中IO操作 利用文件流 过滤流对文件进行读写操作
- java 文件 IO 设置路径
- Java IO 文件
- Web 开发中 文件上传 是出现的:java.io.FileNotFoundException: (文件名、目录名或卷标语法不正确。)
- Struts上传文件报java.io.FileNotFoundException错误