对程序语言的设计者来说,创建一个好的输入/输出(I/O)系统是一项艰难的任务——《Thinking in Java》
Java文件类(File)
File这个名字具有误导性——事实上它既可以代表一个文件,也可以代表文件夹(如果是这样,那就可以对它进行list方法调用)
1)File类的继承关系
java.lang.Object
java.io.File
2)File类的原型声明
public class File extends Object implements Serializable, Comparable<File>
一个File类实例代表了磁盘上的文件或目录
3)File类的构造函数
1)从一个父抽象文件路径和一个子抽象文件路径构造一个新的File实例
File(File parent, String child)
2)通过转换给定的父路径名到一个抽象文件路径来构造一个新的File实例
File(String parentname)
3)通过一个父文件名和一个个字文件名构造一个新的File实例
File(String parent, String child)
4)通过给定一个URI表达式来构造一个新的File实例
File(URI uri)
File类提供了四种不同的方式来构造新的File实例,在取得实例后通过createNewFile()
方法以创建一个新文件,parent指定父目录可以是变量名也可以是字符串,注意所用路径必须存在不存在不会新建
4)File类的基本方法
//构造方法已在上面列出,此处略
exist(): boolean
canRead(): boolean
canWrite(): boolean
canExecute(): boolean
isDirectory(): boolean
isFile(): boolean
isAbsolute(): boolean
isHidden(): boolean
getAbsolutePath(): String
getCanonicalPath(): String
getName(): String
getPath(): String
getParent(): String
lastModified(): long
length(): long
listFile(): File[]
delete(): boolean
renameTo(dest: File): boolean
mkdir(): boolean //创建抽象文件路径名指定的目录
mkdirs(): boolean //创建抽象文件路径名制定的目录,包括所有必须但不存在的父目录
大部分的方法看名字都能知道用法,需要注意的有以下几点:1)createNewFile()方法需要抛一个IOException,2)delete()方法当且仅当文件被成功删除时返回true,其它时候都返回false,3)正确区分mkdir()和mkdirs(),前者是后者的特殊情况,4)尽量不要使用absolutePath来创建一个文件对象,因为这和平台高度相关会降低可移植性(比如Windows下,new File(“C:\\book\\Welcome.java”),要写成File(“Welcome.java”),默认从当前工作目录开始算起)
Java文件读写
PrintWriter类
使用Scanner
类来读文件,PrintWriter
类来写文件
1)PrintWriter类的继承关系
java.lang.Object
java.io.Writer
java.io.PrintWriter
2)PrintWriter类的原型声明
public class PrintWriter extends Writer
3)PrintWriter类的构造方法
PrintWriter类一共有八个构造方法,这里着重介绍两个常用的
1)指定文件名
PrintWriter(filename: String)
2)指定抽象路径
Printwriter(file: File)
3)PrintWriter类的基本方法
print(s: String): void
print(c: char): void
print(cArray: char[]): void
print(i: int): void
print(f: float): void
print(d: double): void
print(b: boolean): void
/**重载的println方法*/
/**重载的printf方法*/
既然是printWriter,那这个类的作用就是print(打印输出),支持不同类型作为参数的输入,下面是一个实例测试代码
注意:file.close()
方法必须在使用文件后调用以关闭文件,否则数据可能无法正确读入
4)TWS(Try-With-Source)
JDK7提供这样的语法以在文件操作结束后自动关闭被打开的文件
try(declare and create resources){
Use the resources to process the file;
}
Scanner类
1)Scanner类的继承关系
java.lang.Object
java.util.Scanner
2)Scanner类的原型声明
public final class Scanner extends Object implements Iterator<String>, Closeable
3)Scanner类的构造方法
有不少,这里简单举出两个最常用的
public Scanner(source: File)
public Scanner(source: String)
4)Scanner类的基本方法
close(): void
hasNext(): boolean
next(): String
nextLine(): String
nextByte(): byte
nextShort(): short
nextInt(): int
nextLong(): long
nextFloat(): float
nextDouble(): double
useDelimiter(pattern: String): Scanner //设置分割符(可以让next方法实现和nextLine一样的效果)
注意:调用Scanner(File)构造方法可能引发IOException,所以在调用者的方法签名处通常写一个throws声明(或者try-catch处理之)
其它文件操作类
这里讲的都是基于文本文件的操作
字符流有两个抽象类Writer
和Reader
其对应子类FileWriter
和FileReader
可以实现文件的读写操作
另外BufferWriter
和BufferReader
提供缓冲区功能,用以提高效率
下面着重讲FileWriter类和FileReader类,至于BufferXX类以后遇到再说
FileWriter类
1)FileWriter类的继承关系
java.lang.Object
java.io.Writer
java.io.OutputStreamWriter
java.io.FileWriter
2)FileWriter类的原型声明
public class FileWriter extends OutputStreamWriter
3)FileWriter类的构造方法
1)在给出File对象的情况下构造出一个FileWriter对象
FileWriter(File file)
2)在给出File对象的情况下构造出一个FileWriter对象,并指定append模式
FileWriter(File file, boolean append)
3)构造与某个文件描述符相关联的FileWriter对象
FileWriter(FileDescriptor fd)
4)在给出文件名的情况下构造FileWriter对象,它具有指示是否挂起写入数据的boolean值
FileWriter(String fileName, boolean append)
4)FileWriter类的基本方法
write(s: String): void
append(s: String): void
flush(): void //字符流有缓冲区机制,必须在flush后才能真正的读到文件里面
FileReader类
1)FileReader类的继承关系
java.lang.Object
java.io.Reader
java.io.inputStreamReader
java.io.FileReader
2)FileReader类的原型声明
public class FileReader extends InputStreamReader
3)FileReader类的构造方法
1)在给定读取文件的情况下创建一个新的FileReader
FileReader(File file)
2)在给定文件描述符的情况下创建一个新的Filereader
FileReader(FileDescriptor fd)
3)在给定文件名的情况下创建一个新的FileReader
FileReader(String fileName)
4)Filereader类的基本方法
read() throws IOException: int //读取单个字符,返回一个int变量代表读到的字符
read(char[] c, int offset, int len) //读取字符到数组,返回读到的字符个数