您的位置:首页 > 编程语言 > Java开发

关于java.io.File类

2013-09-05 20:55 295 查看

一、 一般常用的方法中需要说明的几个方法,其他查看API

1.boolean createNewFile():

当调用此方法的对象所对应的文件不存在时,该方法将创建File对象所对应的新文件,创建成功,则返回true。否则,返回false。

说明:该方法只能新建不存在的文件,不能新建目录

package com.java1029.io.file.d0905.emphasis;

import java.io.File;
import java.io.IOException;
/**
* 测试java.io.File类   boolean  createNewFile()方法
* 该方法只能新建文件,不能新建目录
* @author ml1990s
*
*/
public class TestCreateNewFile {

public static void main(String[] args) {
String path1 = "f:/a.txt";        //没有目录文件层次,盘符下直接就是文件,文件代码执行前不存在
String path2 = "f:/test/a.txt";   //代码执行前已经存在的目录文件下,不存在的文件
String path3 = "f:/ceshi/a.txt";  //代码执行前 目录文件均不存在
File file1 = new File(path1);
File file2 = new File(path2);
File file3 = new File(path3);

try {
file1.createNewFile();
file2.createNewFile();
//以下代码出错,提示:java.io.IOException: 系统找不到指定的路径。
//file3.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}

}

}


2.boolean delete() :

删除File对象所对应的文件,删除成功返回true,否则返回false
说明:删除的File对象所对应文件和空目录时可以删除。若所对应的是非空目录,不可删除。

3.boolean mkdir():

创建对应的目录文件,成功则返回true,否则返回false
说明:调用此方法的对象对应的必须是目录,不能使文件。若是文件,也会创建为目录
package com.java1029.io.file.d0905.emphasis;

import java.io.File;

public class TestMkdir {

public static void main(String[] args) {
String path1 = "f:/test-mkdir/";
String path2 = "f:/test-mkdir/file.txt";

File file1 = new File(path1);
File file2 = new File(path2);

System.out.println(path1+"   目录     "+file1.mkdir());
System.out.println(path2+"   文件     "+file2.mkdir());
}

}
运行结果:两个路径对应的都创建为目录文件
输出:
f:/test-mkdir/   目录     true
f:/test-mkdir/file.txt   文件     true

4.boolean mkdirs():

区别于3,对应路径中父目录不存在在时,连父目录一起创建

5.File[ ] listFiles():

列出所对应目录下的所有文件和目录,并以数组形式返回

6.File[ ] listFiles(FilenameFilter filter):

返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定的文件名过滤器的文件和目录。
说明:返回数组中的路径名必须满足过滤器,若
filter
null
,则接受所有路径名。否则,当且仅当在此抽象路径名及其表示的目录中的文件名或目录名上调用过滤器的 FilenameFilter.accept(File file,String name) 方法返回
true

时,该路径名才满足过滤器。
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;

public class FileSuffixFilter {
public static void main(String[] args) {
File file = new File("f:/test/");
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
//仅当file下的(第一层目录)文件的后缀为“txt”时,才能加入到files[]数组中
File[] files = file.listFiles(new FileSuffixFilterImp("txt"));
for(File f:files){
System.out.println(f.getName());
}
}
}
//测试以后缀名过滤文件
class FileSuffixFilterImp implements FilenameFilter {
private String suffix;

public FileSuffixFilterImp(String suffix) {
this.suffix = suffix;
}

/**
*  该方法会在调用该对象时,自动调用。若“return true”,则通过接受该name
*  当且仅当该名称应该包含在文件列表中时返回 true;否则返回 false
* dir - 被找到的文件所在的目录。
* name - 文件的名称
*/
@Override
public boolean accept(File dir, String name) {
String suffix = name.substring(name.lastIndexOf(".")+1);
if(this.suffix.equals(suffix)){
return true;
}
return false;
}
}


二、关于File的相关删除

package com.java1029.io.file.d0905.emphasis;

import java.io.File;
import java.io.IOException;

/**
* 测试相关File删除操作:指定文件名删除,指定后缀名删除...
* @author ml1990s
*
*/
public class DeleteFile {

public static void main(String[] args) {
System.out.println("main start");
String path = "f:/现用文档/test/";
File file = new File(path);
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
// deleteFile(file);
// deleteFileBySuffix(file, "txt");
deleteByName(file, "aaa.txt");
System.out.println("main end");
}

/**
* 遍历文件,删除全部文件,保留目录
*
* @param file
*/
public static void deleteFileIsFile(File file) {

if (file.isDirectory()) {

File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {

DeleteFile.deleteFileIsFile(files[i]);
}
} else {
boolean flag = file.delete();
if (flag) {
System.out.println("文件" + file.getParent() + "\\"
+ file.getName() + "->delete sucess");
} else {
System.out.println("文件" + file.getParent() + "\\"
+ file.getName() + "->delete fail");
}
}
}

/**
* 该方法用来补充delete() 方法不能删除 非空目录的缺点
*
* 删除本文件或目录及目录所包含的所有文件目录
*
* @param file
*/
public static void deleteAll(File file){
deleteFileIsFile(file);
//先判断file是否存在,若存在即为目录

if(!file.delete()){
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {
deleteAll(files[i]);
}
//删掉子目录后,再次尝试删除父目录
if(file.delete()){
System.out.println("目录"+file.getParent()+"\\"+file.getName()+"->delete success");
}else{
System.out.println("目录"+file.getParent()+"\\"+file.getName()+"->delete fail");
}
}else{
System.out.println("目录"+file.getParent()+"\\"+file.getName()+"->delete success");
}

}

/**
* 遍历文件,删除指定名字的文件和目录
*
* @param file
* @param name
*/
public static void deleteByName(File file, String name) {

File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {

if (files[i].isDirectory() && !name.equals(files[i].getName())) {

deleteByName(files[i], name);

} else if (files[i].isDirectory()
&& name.equals(files[i].getName())) {
// 删除与指定name相同的目录,在删目录前需先删除该目录中文件
deleteAll(files[i]);
} else {
if (name.equals(files[i].getName())) {
boolean flag = files[i].delete();

if (flag) {
System.out.println("文件" + files[i].getParent() + "\\"
+ files[i].getName() + "->delete sucess");
} else {
System.out.println("文件" + files[i].getParent() + "\\"
+ files[i].getName() + "->delete fail");
}
}
}

}

}

/**
* 遍历文件,删除指定后缀文件
*
* @param file
* @param suffix
* @return
*/
public static void deleteFileBySuffix(File file, String suffix) {
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {
if (files[i].isFile()) {
String fileName = files[i].getName();
String fileSuf = fileName
.substring(fileName.lastIndexOf(".") + 1);

/*
* //使用split() 截取字符串 String[] fileNameSplite =
* fileName.split("\\.");//正则表达式"."需使用正则转义字符"//."
* System.out.println(fileNameSplite.length); String fileSuf =
* fileNameSplite[fileNameSplite.length - 1];
*/
if (suffix.equals(fileSuf)) {
boolean flag = files[i].delete();
if (flag) {
System.out.println(files[i].getParent() + "\\"
+ files[i].getName() + "->delete sucess");
} else {
System.out.println(files[i].getParent() + "\\"
+ files[i].getName() + "->delete fail");
}
}

} else {
deleteFileBySuffix(files[i], suffix);
}

}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐