今天我们学习一下java中的File类
相应的API文档:File类
以下是本人做的一些整理:
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类的方法详解
File file1 = new File ("C://temp//myNote.txt"); // in Windows 这是windows文件系统下的方法
File file2 = new File ("/tmp/myNote.txt"); // in Linux/Unix unix文件系统的方法
在不同的操作系统中,文件之间的分隔符表示方式不一样的,为了安全起见,我们可以使用File.separator来表示分隔符
最安全的建立文件的方法:
File myFile = new File("C:" + File.separator + "jdk1.5.0" + File.separator, "File.java");
提醒:File.separator 表示的是文件路径符号。
常用方法介绍:
System.out.println(myFile.getName());//取得文件名称的方法
System.out.println(myFile.getPath());//取得文件路径的方法
System.out.println(myFile.isAbsolute());//判断文件是否完整
System.out.println(myFile.getParent());//取得文件的根目录
System.out.println(myFile.exists());//判断文件是否存在
System.out.println(myFile.isDirectory());//判断是否是目录
System.out.println(myFile.isFile());//判断是否是文件
System.out.println(myFile.isHidden());//判断是否是隐藏文件
System.out.println(myFile.canRead());//判断是否可读
System.out.println(myFile.canWrite());//判断是否可写
File myFile_C=new File("d:/test.txt");
System.out.println(new Date(myFile_C.lastModified()));//最后一次编辑时间
myFile_C.renameTo(new File("c:/text.txt.bak"));//重新命名此抽象路径名表示的文件。
myFile_C.setReadOnly();//设置为只读
二:File类的实例应用
1. 创建文件和目录
编写代码创建一个目录E:\test,下面含有两个文件1.txt,2.txt 和一个目录dir,dir目录下有两个文件3.txt和4.txt
- <span style="font-family:SimSun;font-size:18px;"> public static void createDirectory(){
- System.out.println("**********************");
- File f=new File("E:"+File.separator+"test"); //File.separator为文件分隔符,在windows下为\
- System.out.println("create directory...");
- f.mkdir(); //创建目录
- File file1=new File(f,"1.txt"); //在目录test下创建两个文件
- File file2=new File(f,"2.txt");
- try {
- file1.createNewFile();
- file2.createNewFile();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } //创建文件
- File f2=new File(f,"dir"); //在目录test下创建目录dir
- f2.mkdir();
- File file3=new File(f2,"3.txt"); //创建文件
- File file4=new File(f2,"4.txt");
- try {
- file3.createNewFile();
- file4.createNewFile();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- //测试创建的File对象:是文件还是文件夹
- System.out.println("f is file? " +f.isFile()); //false
- System.out.println("f is directory? "+ f.isDirectory()); //true
- System.out.println("file1 is file? " +file1.isFile()); //true
- System.out.println("file2 is file? " +file1.isFile()); //true
- System.out.println("f2 is file? " +f.isFile()); //false
- System.out.println("f2 is directory? "+ f.isDirectory()); //true
- System.out.println("file3 is file? " +file1.isFile()); //true
- System.out.println("file3 is file? " +file1.isFile()); //true
- }</span>
2. 列出目录下所有的文件名
编写一个程序,在命令行中以树状结构展示特定的文件夹及其子文件(夹)。(使用递归来实现)
- public class FileTree {
- public static void main(String[] args) {
- //找一个自己硬盘上有用的文件夹
- File f = new File("e:/test");
- printFile(f, 0);
- }
- //树状结构打印
- static void printFile(File file,int level){
- for (int i = 0; i < level; i++) {
- System.out.print("-");
- }
- System.out.println(file.getName());
- if(file.isDirectory()){
- File[] files = file.listFiles();
- for (File temp : files) {
- printFile(temp, level+1);
- }
- }
- }
- }
test
-1.txt
-2.txt
-dir
--3.txt
--4.txt
3. 列出目录下所有的文件路径
编写一个程序,在命令行中以树状结构展示特定的文件夹及其子文件(夹)的路径。(使用递归来实现)
- public class FileTree {
- public static void main(String[] args) {
- //找一个自己硬盘上有用的文件夹
- File f = new File("e:/test");
- printFilePath(f, 0);
- }
- static void printFilePath(File file,int level){
- for (int i = 0; i < level; i++) {
- System.out.print("-");
- }
- System.out.println(file.getPath());
- if(file.isDirectory()){
- File[] files = file.listFiles();
- for (File temp : files) {
- printFilePath(temp, level+1);
- }
- }
- }
- }
显示结果:
e:\test
-e:\test\1.txt
-e:\test\2.txt
-e:\test\dir
--e:\test\dir\3.txt
--e:\test\dir\4.txt
4. 删除一个文件(包含文件里的目录)
- <span style="font-family:SimSun;font-size:18px;">public class FileDeleteAllFile {
- public static void main(String[] args) {
- //找一个自己硬盘上有用的文件夹
- File f = new File("e:/test");
- deleteAll(f);
- }
- public static void deleteAll(File file){
- if(!file.exists())
- return ;
- //为文件或者目录为空
- if(file.isFile()||file.list().length==0){
- file.delete();
- return;
- }else{
- File[] files=file.listFiles();
- for(File f:files){
- deleteAll(f);
- }
- file.delete();
- }
- }
- }</span>
- import java.io.File;
- import java.io.IOException;
- public class TestFile {
- public void createFile(String path){
- File file=new File(path);
- if(!file.exists()){//判断文件是否存在
- try {
- file.createNewFile(); //创建文件
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- /*获取文件名*/
- String name=file.getName();
- /*获取文件路径*/
- String path_=file.getPath();
- /*获取绝对路径名*/
- String absPath=file.getAbsolutePath();
- /*获取父亲文件路径*/
- String parent=file.getParent();
- /*文件大小*/
- long size=file.length();
- /*最后一次修改时间*/
- long time=file.lastModified();
- System.out.println("文件名:"+name);
- System.out.println("文件路径:"+path_);
- System.out.println("文件的绝对路径:"+absPath);
- System.out.println("文件的父文件路径:"+parent);
- System.out.println("文件的大小:"+size);
- System.out.println("文件最后一次修改时间:"+time);
- //file.delete(); //删除文件
- }
- public void createDir(String path){
- File file=new File(path);
- if(!file.exists()){
- file.mkdirs(); //创建文件夹
- }
- //file.delete(); 若文件夹为空,则删除文件夹
- }
- /**
- * 遍历文件夹中的文件并显示
- */
- public void fileTest(String path){
- File file=new File(path);
- File[] files=file.listFiles();
- //System.out.println(files.length);
- for (File f : files) {
- if(f.isFile()){
- System.out.println(f.getName()+"是文件!");
- }else if(f.isDirectory()){
- fileTest(f.getPath());
- }
- }
- }
- public void reFileName(String fromPath,String toPath){
- File file1=new File(fromPath);
- File file2=new File(toPath);
- /*判断file2文件夹路径存在与否,不存在则创建*/
- if(!file2.exists()){
- new File(file2.getParent()).mkdirs();
- }
- file1.renameTo(file2); //修改文件名
- }
- public static void main(String[] args) {
- // File file=new File("E:\\myjava\\1.txt"); // Window路径\\
- // File flie_=new File("E:/myjava","1.txt"); //linux路径 /
- //
- TestFile tf=new TestFile();
- //tf.createFile("E:\\myjava\\1.txt");
- //tf.fileTest("E:/wepull");
- //tf.createDir("e:/sunxiao/abc/1.txt");
- //tf.reFileName("E:\\my\\2.txt","E:\\myjava\\1.txt");
- tf.copyFlie("E:\\myjava","F:\\");
- }
- private void copyFlie(String src, String to) {
- File file1=new File(src);
- String topath=to+"\\"+file1.getName();
- File file2=new File(topath);
- if(!file2.exists()){
- file2.mkdirs();
- }
- System.out.println(topath);
- File[] file=file1.listFiles();
- for (File f : file) {
- if(f.isFile()){
- String path2=topath+"\\"+f.getName();
- Creatfile(path2);
- }else if(f.isDirectory()){
- String s=f.getPath();
- copyFlie(s,topath);
- }
- }
- }
- private void Creatfile(String path2) {
- File file3=new File(path2);
- if(!file3.exists()){//判断文件是否存在
- try {
- file3.createNewFile(); //创建文件
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
- }
由于一直在使用Java file功能,但是总是很混乱,今天将Java File的所有功能做一个总结。
Java文件操作我个人认为重要的问题有:
a:如何跨平台问题
b:文件编码问题,尤其是多语言平台情况下如何正常工作。
c:文件读写效率、操作效率
d:文件加密和文件安全
e:文件快速检索,强烈建议使用lence进行文件检索及文件管理。
以下是本人做的一些整理:
一:建立文件
File file1 = new File ("C://temp//myNote.txt"); // in Windows 这是windows文件系统下的方法
File file2 = new File ("/tmp/myNote.txt"); // in Linux/Unix unix文件系统的方法
最安全的建立文件的方法:
File myFile = new File("C:" + File.separator + "jdk1.5.0" + File.separator, "File.java");
File.separator 是文件路径符号。
System.out.println(myFile.getName());//取得文件名称的方法
System.out.println(myFile.getPath());//取得文件路径的方法
System.out.println(myFile.isAbsolute());//判断文件是否完整
System.out.println(myFile.getParent());//取得文件的根目录
System.out.println(myFile.exists());//判断文件是否存在
System.out.println(myFile.isDirectory());//判断是否是目录
System.out.println(myFile.isFile());//判断是否是文件
System.out.println(myFile.isHidden());//判断是否是隐藏文件
System.out.println(myFile.canRead());//判断是否可读
System.out.println(myFile.canWrite());//判断是否可写
File myFile_A = new File("C:" + File.separator);
for(String s: myFile_A.list()){//读取某个目录下所有文件
System.out.println(s);
}
File myFile_C=new File("d:/test.txt");
System.out.println(new Date(myFile_C.lastModified()));//最后一次编辑时间
myFile_C.renameTo(new File("c:/text.txt.bak"));//从命名
myFile_C.setReadOnly();//设置为只读
二:文件过滤方法
java提供了很好的文件过滤借口:FilenameFilter 过滤以后的文件可以用listFiles显示出来。效率还是非常高的。
import java.io.File;
import java.io.FilenameFilter;
import java.util.Date;
/**
* 文件过滤器过滤类
* @author fb
*/
class FileListFilter implements FilenameFilter {
private String name;
private String extension;
public FileListFilter(String name, String extension) {
this.name = name;
this.extension = extension;
}
public boolean accept(File directory, String filename) {
boolean fileOK = true;
if (name != null) {
fileOK = filename.startsWith(name);
}
if (extension != null) {
fileOK = filename.endsWith('.' + extension);
}
return fileOK;
}
}
测试方法:
import java.io.File;
import java.io.FilenameFilter;
import java.util.Date;
/**
* 文件过滤器 运行函数
* @author fb
*/
public class Run_FileListFilter {
public static void main(String[] args) {
File myDir = new File("d:/");
FilenameFilter select = new FileListFilter("F", "txt");
File[] contents = myDir.listFiles(select);
for (File file : contents) {
System.out.println(file + " is a " + (file.isDirectory() ? "directory" : "file")
+ " last modified on/n" + new Date(file.lastModified()));
}
}
}
三:建立目录、文件、临时文件、删除文件或目录
import java.io.File;
import java.io.IOException;
public class MakeDir {
public static void main(String[] args) {
File myFile=new File("D:/myFubin/");
if(myFile.mkdir()){//单级目录
System.out.println("建立目录成功");
}else{
System.out.println("建立目录失败");
}
File myFile_A=new File("D:/myFubin/test/");
if(myFile_A.mkdirs()){//多级目录
System.out.println("建立目录成功");
}else{
System.out.println("建立目录失败");
}
File file = new File("d://myFubin//test.txt");
try {
file.createNewFile();//建立空文件
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(file.canRead());
if(file.delete()){//删除文件或删除目录
//删除文件的另外一个方法:file.deleteOnExit() 这种方法是在程序退出的时候将文件删除
System.out.println("删除成功");
}else{
System.out.println("删除失败");
}
try {
File tmp = File.createTempFile("foo", "tmp");//建立临时文件
System.out.println("刚才建立的临时文件在:" + tmp.getCanonicalPath());
} catch (IOException e) {
e.printStackTrace();
}
}
}
import java.io.File;
/**
* @author fb www.cujava.com
* 文件操作里Java 1.6 新功能:查询磁盘空间
*/
public class SpaceChecker {
public static void main(String[] args) {
File[] roots = File.listRoots();//取得所有的根,如果是windows系统那么将取得所有的磁盘
for (int i = 0; i < roots.length; i++) {
System.out.println(roots[i]);
System.out.println("Free space = " + roots[i].getFreeSpace());
System.out.println("Usable space = " + roots[i].getUsableSpace());
System.out.println("Total space = " + roots[i].getTotalSpace());
System.out.println();
}
}
}