1. 文件和目录的概念
文件是由一些具有永久存储即特定顺序的字节组成的有序的、具有名称的集合。
操作系统用与系统相关的路径名字符串来命名文件和目录。字符串路径名可以是绝对路径名,也可以是相对路径名。绝对路径名是完整的路径名;相对路径名必须使用来自其他路径名信息进行解释。
在UNIX/Linux操作系统下,路径分隔符为“/ ”。
在Microsoft Windows操作系统下,路径分隔符为“ \ ”。在Java中,“ \ ”为转义符因此路径分隔符均须写成“ \ \ ”
2.文件操作类
- 文件类
文件类(File)类的实例是不可改变的,即一旦创建,File对象表示的抽象路径名将永不改变。
1. 创建一个新的文件对象
(1)如果在应用程序中只访问一个文件,这种方法比较容易构建
File myFile;
myFile = new File("Folder\\File\\data.txt");
(2)如果在同一目录里打开数个文件,则这种和(3)结构更好。
myFile = new File("Folder\\File","data.txt")
(3)
File myDir = new file("Folder\\File");
myFile = new File(myDir,"data.txt")
2. 文件测试和使用
(1)文件名:String getName()、String getPath()、String getAbslutePath()、 String getParent()、boolean renameTo(File newName)。
(2)文件测试:boolean exist()、boolean canWrite()、boolean canRead()、boolean isFile()、boolean isDirectory()、boolean isAbsolute()。
(3)一般文件信息:long lastModified()、long length()。
(4)目录用法:boolean mkdir()、String[] list()。
- 文件过滤器
文件过滤器接口(FileFilter)可以用来检测文件是否存在接口。实现此接口的类实例可用于过滤器文件名。
实例:搜索g:/AHTML目录下扩展名为.html的所有文件。
public class ExtensionFileFilter implements FileFilter {
private String extension;
public ExtensionFileFilter(String extension) {
this.extension = extension;
}
/*
*覆盖必须实现的accept方法
*/
@Override
public boolean accept(File file) {
if(file.isDirectory()){
return false;
}
String name = file.getName();
int index = name.lastIndexOf("."); //查找是否带“.”如果不带就返回false
if(index == -1){
return false;
}else if(index == name.length()-1){ //无扩展名,返回false
return false;
}else{
//查看是否与构造函数传进去的扩展名参数相等
return this.extension.equals(name.substring(index + 1));
}
}
}
public class FileFilterEg {
public static void main(String[] args) {
//文件夹目录
String dir = "g:/AHTML";
File file = new File(dir);
//搜索X:/book文件夹下的所有后缀名为*.cfg文件
File[] files= file.listFiles(new ExtensionFileFilter("html"));
for(int i = 0;i < files.length;i++){
System.out.println("Name: " +files[i].getPath()); //输出文件名
}
}
}
运行结果:
- 随机存取文件类
将一个文本文件当做一个数据库,读完一个记录后跳到另一个记录,并且这两个记录在文件的不同地方。Java提供了随机存取文件(RandomAccessFile)类来支持操作这种类型的输入/输出。
1. 创建随机访问文件
(1)用文件名:
myRAFile = new RandomAccessFile(String name,String mode);
(2)用文件对象
myRAFile = new RandomAccessFile(File file,String mode);
mode参数决定了访问文件的权限,如只读“r”或者读写“wr”等。
2. 访问信息
RandomAccessFile对象的读写操作和DataInputStream/DataOutputStream对象的操作方式一样,可以使用在DataInputStream和DataOutputStream里出现的所有read()和write()方法。
使文件里的指针移动的方法:
1)long getFilePointer():返回当前指针。
2)void seek(long pos):将文件指针定位到一个绝对地址。地址是相对于文件头的偏移量。地址0表示文件的开头。
3)long length():返回文件长度。
3. 增加信息
可以使用随机访问文件来设置增加信息模式:
myRAF = new RandomAccessFile("g:/a.txt", "rw");
myRAF.seek(myRAF.length());
实例——增加信息:
public class RATest {
public static void main(String[] args) throws IOException {
RandomAccessFile myRAF;
String s = "Information to Append \n Hi mom! \n";
myRAF = new RandomAccessFile("g:/a.txt", "rw");
myRAF.seek(myRAF.length()); //将文件指针跳到结尾处
myRAF.writeBytes(s); //增加信息
myRAF.close();
}
运行结果: