package test0;
import java.io.File;
import java.io.IOException;
public class Test{
public static void main(String[] args) throws IOException {
File f=new File("F:\\io\\io1\\hi.txt");
//创建一个与f同目录下的另一个文件,文件名为haha.txt
File f1=new File(f.getParent(),"haha.txt");
//或者可以这么干:File f1=new File("F:\\io\\io1\\haha.txt");
boolean test=f1.createNewFile();
if(test){
System.out.println("创建成功");
}
}
}
2.判断指定目录下是否有后缀名为.jpg的文件,如果有,就输出该文件名称
利用list()得到String[],再用endsWith,.jpg即可
package test0;
import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;
import org.junit.Test;
public class FindJPGFileTest {
@Test
public void test1(){
File srcFile = new File("d:\\code");
String[] fileNames = srcFile.list();
for(String fileName : fileNames){
if(fileName.endsWith(".jpg")){
System.out.println(fileName);
}
}
}
@Test
public void test2(){
File srcFile = new File("d:\\code");
File[] listFiles = srcFile.listFiles();
for(File file : listFiles){
if(file.getName().endsWith(".jpg")){
System.out.println(file.getAbsolutePath());
}
}
}
/*
* File类提供了两个文件过滤器方法
* public String[] list(FilenameFilter filter)
* public File[] listFiles(FileFilter filter)
*/
@Test
public void test3(){
File srcFile = new File("d:\\code");
File[] subFiles = srcFile.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".jpg");
}
});
for(File file : subFiles){
System.out.println(file.getAbsolutePath());
}
}
}
3.遍历指定目录所有文件名称(不要文件目录),包括子文件目录中的文件。
用递归或者循环
注意:只有文件才能调用length。如果想把文件目录用delete删除,要想删除成功,文件目录中是不能放东西的,即不能有子目录或者文件,否则返回false,删不掉
拓展1:求指定目录所在空间的大小
拓展2:删除指定文件目录及其下的所有文件,因为如果想把文件目录用delete删除,要想删除成功,文件目录中是不能放东西的,即不能有子目录或者文件,否则返回false,删不掉,所以还要去遍历,一直遍历到最里面,
从里面开始往外删除
package test0;
import java.io.File;
public class ListFilesTest {
public static void main(String[] args) {
// 递归:文件目录
//打印出指定目录所有文件名称,包括子文件目录中的文件
// 1.创建目录对象
File dir = new File("C:\\Users\\11930\\eclipse-workspace\\test01");
// 2.打印目录的子文件
printSubFile(dir);
}
public static void printSubFile(File dir) {
// 打印目录的子文件
File[] subfiles = dir.listFiles();
for (File f : subfiles) {
if (f.isDirectory()) {// 文件目录
printSubFile(f);
} else {// 文件
System.out.println(f.getAbsolutePath());
}
}
}
// 方式二:循环实现
// 列出file目录的下级内容,仅列出一级的话
// 使用File类的String[] list()比较简单
public void listSubFiles(File file) {
if (file.isDirectory()) {
String[] all = file.list();
for (String s : all) {
System.out.println(s);
}
} else {
System.out.println(file + "是文件!");
}
}
// 列出file目录的下级,如果它的下级还是目录,接着列出下级的下级,依次类推
// 建议使用File类的File[] listFiles()
public void listAllSubFiles(File file) {
if (file.isFile()) {
System.out.println(file);
} else {
File[] all = file.listFiles();
// 如果all[i]是文件,直接打印
// 如果all[i]是目录,接着再获取它的下一级
for (File f : all) {
listAllSubFiles(f);// 递归调用:自己调用自己就叫递归
}
}
}
// 拓展1:求指定目录所在空间的大小
// 求任意一个目录的总大小
public long getDirectorySize(File file) {
// file是文件,那么直接返回file.length()
// file是目录,把它的下一级的所有大小加起来就是它的总大小
long size = 0;
if (file.isFile()) {
size += file.length();
} else {
File[] all = file.listFiles();// 获取file的下一级
// 累加all[i]的大小
for (File f : all) {
size += getDirectorySize(f);// f的大小;
}
}
return size;
}
// 拓展2:删除指定的目录
public void deleteDirectory(File file) {
// 如果file是文件,直接delete
// 如果file是目录,先把它的下一级干掉,然后删除自己
if (file.isDirectory()) {
File[] all = file.listFiles();
// 循环删除的是file的下一级
for (File f : all) {// f代表file的每一个下级
deleteDirectory(f);
}
}
// 删除自己
file.delete();
}
}