文章目录
总述文件构造方法使用示例
常用方法示例
文件流FileInputStream 和 FileOutputStream 。文件流的构造方法代码示例
编程示例
FileReader示例
随机读写RandomAccessFile支持随机文件操作的方法RandomAccessFile 的构造方法示例1示例2
相关文章
总述
整个 Java.io 包中最重要的就是 5 个类。指的是 File、OutputStream、InputStream、Writer、Reader;本节将重点讲解 Java.io 的相关内容。
文件
Java 使用 File 类来直接处理文件和文件系统。 File 类没有指定信息怎样从文件读取或向文件存储,它描述了文件本身的属性。 File 对象用来获取或处理与磁盘文件相关的信息,例如权限,时间,日期和目录路径。 此外,File 还浏览子目录层次结构。Java 中的目录当成 File 对待,它具有附加的属性——一个可以被 list() 方法检测的文件名列表。
构造方法
构造方法说明
File(File parent, String child)根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。File(String pathname)通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例File(String parent, String child)根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例File(URI uri)通过将给定的 file: URI 转换为一个抽象路径名来创建一个新的 File 实例
使用示例
File f1
= new File("/home/project/");
File f2
= new File("/home/project/","a.bat");
File f3
= new File(f1
,"a.bat");
常用方法
方法说明
boolean canExecute()测试应用程序是否可以执行此抽象路径名表示的文件boolean canRead()测试应用程序是否可以读取此抽象路径名表示的文件boolean canWrite()测试应用程序是否可以修改此抽象路径名表示的文件int compareTo(File pathname)按字母顺序比较两个抽象路径名boolean createNewFile()当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件static File createTempFile(String prefix, String suffix)在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称static File createTempFile(String prefix, String suffix, File directory)在指定目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称boolean delete()删除此抽象路径名表示的文件或目录void deleteOnExit()在虚拟机终止时,请求删除此抽象路径名表示的文件或目录boolean equals(Object obj)测试此抽象路径名与给定对象是否相等boolean exists()测试此抽象路径名表示的文件或目录是否存在File getAbsoluteFile()返回此抽象路径名的绝对路径名形式String getAbsolutePath()返回此抽象路径名的绝对路径名字符串File getCanonicalFile()返回此抽象路径名的规范形式String getCanonicalPath()返回此抽象路径名的规范路径名字符串long getFreeSpace()返回此抽象路径名指定的分区中未分配的字节数String getName()返回由此抽象路径名表示的文件或目录的名称String getParent()返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 nullFile getParentFile()返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 nullString getPath()将此抽象路径名转换为一个路径名字符串long getTotalSpace()返回此抽象路径名指定的分区大小long getUsableSpace()返回此抽象路径名指定的分区上可用于此虚拟机的字节数int hashCode()计算此抽象路径名的哈希码boolean isAbsolute()测试此抽象路径名是否为绝对路径名boolean isDirectory()测试此抽象路径名表示的文件是否是一个目录boolean isFile()测试此抽象路径名表示的文件是否是一个标准文件boolean isHidden()测试此抽象路径名指定的文件是否是一个隐藏文件long lastModified()返回此抽象路径名表示的文件最后一次被修改的时间long length()返回由此抽象路径名表示的文件的长度String[] list()返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录String[] list(FilenameFilter filter)返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录File[] listFiles()返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件File[] listFiles(FileFilter filter)返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录File[] listFiles(FilenameFilter filter)返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录static File[] listRoots()列出可用的文件系统根boolean mkdir()创建此抽象路径名指定的目录boolean mkdirs()创建此抽象路径名指定的目录,包括所有必需但不存在的父目录boolean renameTo(File dest)重新命名此抽象路径名表示的文件boolean setExecutable(boolean executable)设置此抽象路径名所有者执行权限的一个便捷方法boolean setExecutable(boolean executable, boolean ownerOnly)设置此抽象路径名的所有者或所有用户的执行权限boolean setLastModified(long time)设置此抽象路径名指定的文件或目录的最后一次修改时间boolean setReadable(boolean readable)设置此抽象路径名所有者读权限的一个便捷方法boolean setReadable(boolean readable, boolean ownerOnly)设置此抽象路径名的所有者或所有用户的读权限boolean setReadOnly()标记此抽象路径名指定的文件或目录,从而只能对其进行读操作boolean setWritable(boolean writable)设置此抽象路径名所有者写权限的一个便捷方法boolean setWritable(boolean writable, boolean ownerOnly)设置此抽象路径名的所有者或所有用户的写权限String toString()返回此抽象路径名的路径名字符串URI toURI()构造一个表示此抽象路径名的 file: URI
示例
import java
.io
.File
;
import java
.io
.IOException
;
public class FileDemo {
public static void main(String
[] args
){
File f1
=new
File("/home/project/1.txt");
File f2
=new File("/home/project","2.txt");
File f3
=new File("/home"+File
.separator
+"project");
File f4
=new File(f3
,"3.txt");
try {
System
.out
.println(f1
);
System
.out
.println(f2
.createNewFile());
System
.out
.println(f3
.delete());
}catch(IOException e
) {
e
.printStackTrace();
}
File
[] files
=File
.listRoots();
for(File file
:files
){
System
.out
.println(file
);
if(file
.length()>0){
String
[] filenames
=file
.list();
for(String filename
:filenames
){
System
.out
.println(filename
);
}
}
}
}
}
文件流
java.io 包中提供了文件操作类:
用于读写本地文件系统中的文件:FileInputStream 和 FileOutputStream描述本地文件系统中的文件或目录:File、FileDescriptor 和 FilenameFilter提供对本地文件系统中文件的随机访问支持:RandomAccessFile
FileInputStream 和 FileOutputStream 。
FileInputStream 类用于打开一个输入文件,若要打开的文件不存在,则会产生异常 FileNotFoundException,这是一个非运行时异常,必须捕获或声明抛弃;
在进行文件的读 / 写操作时,会产生非运行时异常 IOException,必须捕获或声明抛弃(其他的输入 / 输出流处理时也同样需要进行输入 / 输出异常处理)。
文件流的构造方法
构造方法说明
FileInputStream(File f)打开一个以 f 描述的文件作为输入FileInputStream(String name)打开一个文件路径名为 name 的文件作为输入FileOutputStream(File f)创建一个以 f 描述的文件作为输出,如果文件存在,则其内容被清空FileOutputStream(String name)创建一个文件路径名为 name 的文件作为输出,文件如果已经存在,则其内容被清空FileOutputStream(String name, boolean append)创建一个文件路径名为 name 的文件作为输出,文件如果已经存在,则在该输出上输出的内容被接到原有内容之后
代码示例
File f1
= new File("file1.txt");
File f2
= new File("file2.txt");
FileInputStream in
= new FileInputStream(f1
);
FileOutputStream out
= new FileOutputStream(f2
);
输入流的参数是用于指定输入的文件名,输出流的参数则是用于指定输出的文件名。
编程示例
使用输入流和输出将 file1.txt 的内容复制到 file2.txt。 我这里在/home/project/ 目录(可以选择自己本机的路径) 下新建 txt 文件 file1.txt。填入内容比如 shiyanlou。
import java
.io
.File
;
import java
.io
.FileInputStream
;
import java
.io
.FileNotFoundException
;
import java
.io
.FileOutputStream
;
import java
.io
.IOException
;
public class Test {
public static void main(String
[] args
) {
try {
File inFile
= new File("/home/project/file1.txt");
File outFile
= new File("file2.txt");
FileInputStream fis
= new FileInputStream(inFile
);
FileOutputStream fos
= new FileOutputStream(outFile
);
int c
;
while((c
= fis
.read()) != -1){
fos
.write(c
);
}
fis
.close();
fos
.close();
}catch(FileNotFoundException e
) {
System
.out
.println("FileStreamsTest:" + e
);
}catch(IOException e
){
System
.err
.println("FileStreamTest:" + e
);
}
}
}
FileReader
如果文件内容保存的是字符信息,如 txt 文件等,还可以使用 FileReader 来读取文件内容。
示例
FileReader file
= new FileReader("/home/project/shiyanlou.txt");
int data
= 0;
while((data
=file
.read())!=-1){
System
.out
.print((char)data
);
}
file
.close();
随机读写
对于 FileInputStream/FileOutputStream、FileReader/FileWriter 来说,它们的实例都是顺序访问流,即只能进行顺序读 / 写。 而类 RandomAccessFile 则允许文件内容同时完成读和写操作,它直接继承 Object,并且同时实现了接口 DataInput 和 DataOutput。
随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组。存在指向该隐含数组的光标或索引,称为文件指针;输入操作从文件指针开始读取字节,并随着对字节的读取而前移此文件指针。如果随机访问文件以读取 / 写入模式创建,则输出操作也可用;输出操作从文件指针开始写入字节,并随着对字节的写入而前移此文件指针。
RandomAccessFile支持随机文件操作的方法
方法说明
XXX readXXX() 或者 writeXXX()如 readInt(), readLine(), writeChar(), writeDouble() 等int skipBytes(int n)将指针向下移动若干字节。int length()返回文件长度。long getFilePointer()返回指针当前位置。void seek(long pos)将指针调用所需位置。
在生成一个随机文件对象时,除了要指明文件对象和文件名之外,还需要指明访问文件的模式。
RandomAccessFile 的构造方法
RandomAccessFile(File file
,String mode
)
RandomAccessFile(String name
,String mode
)
mode 的取值:
r: 只读,任何写操作都讲抛出 IOExceptionrw: 读写,文件不存在时会创建该文件,文件存在是,原文件内容不变,通过写操作改变文件内容。rws: 打开以便读取和写入,对于 “rw”,还要求对文件的内容或元数据的每个更新都同步写入到底层存储设备。rwd: 打开以便读取和写入,对于 “rw”,还要求对文件内容的每个更新都同步写入到底层存储设备。
示例1
新建文件randomAccess.txt,并输入0123456789shiyanlou保存,从偏移量为 10 的位置开始读取文件 randomAccess.txt 的内容; 输出文件内容 (以字符串形式,不能直接输出字节内容)。
import java
.io
.File
;
import java
.io
.IOException
;
import java
.io
.RandomAccessFile
;
import java
.util
.Arrays
;
public class RandomFile {
public static void main(String
[] args
) {
RandomAccessFile file
;
try {
File d
= new File("/home/project/randomAccess.txt");
file
= new RandomAccessFile(d
, "rw");
file
.seek(10);
byte[] b
= new byte[(int) file
.length()-10];
file
.read(b
);
System
.out
.println(new String(b
));
} catch (IOException e
) {
e
.printStackTrace();
}
}
}
示例2
import java
.io
.IOException
;
import java
.io
.RandomAccessFile
;
public class FileDemo {
public static void main(String
[] args
){
int data_arr
[] = {12, 32, 43, 45, 1, 5};
try {
RandomAccessFile randf
=new RandomAccessFile("temp.dat","rw");
for(int i
= 0; i
< data_arr
.length
; i
++){
randf
.writeInt(data_arr
[i
]);
}
for(int i
= data_arr
.length
-1 ; i
>= 0; i
--){
randf
.seek(i
* 4L
);
System
.out
.println(randf
.readInt());
}
randf
.close();
}catch(IOException e
){
System
.out
.println("File access error" + e
);
}
}
}
相关文章
蓝桥杯Java课程学习——IO(一)
蓝桥杯Java课程学习——IO(二)
蓝桥杯Java课程学习——IO(三)