【java学习笔记】文件操作

时间:2024-04-16 14:34:41

文件操作 java.io.File

①创建删除文件及目录 ②查看文件及目录属性 ③文件过滤器 (PS:不包括文件读写数据)

1.单个文件

  创建单个文件,查看属性,删除单个文件。

 package tmp;

 import java.io.File;
import java.io.IOException; public class File_createNewFile {
public static void main(String[] args) throws IOException { //在当前目录下(当前项目的根目录)创建一个文件test.txt
File file = new File("."+File.separator+"test.txt"); if(!file.exists()){
file.createNewFile();
System.out.println("文件创建完毕!");
}else{
System.out.println("该文件已存在!");
} System.out.println(file.getName()); //获取文件名 String
System.out.println(file.length()); //获取文件长度 long ,单位:字节
System.out.println(file.canRead()); //是否可读
System.out.println(file.canWrite()); //是否可写
System.out.println(file.isAbsolute()); //是否是一个绝对路径
System.out.println(file.isFile()); //是否是文件
System.out.println(file.isDirectory());//是否是目录
System.out.println(file.isHidden()); //是否隐藏
System.out.println(file.exists()); //是否存在 File[] files = file.listFiles(); //获取指定路径下子目录和子文件
for (File f : files) {
System.out.println(f);
} File file2 = new File("."+File.separator+"test2.txt");
file.renameTo(file2); //重命名/剪切 file.delete(); //删除文件
System.out.println(file.exists()); //文件不存在了 String path = file.getAbsolutePath();//获取绝对路径
System.out.println(path);
}
}

  2.一级目录

    一级目录的创建,删除。

 import java.io.File;

 // 使用File创建一个目录
public class File_mkdir {
public static void main(String[] args) {
//在当前目录下创建一个目录:demo
// File dir = new File("a/b/demo.txt"); // 只有当a/b两级目录存在时可创建,否则不行。
File dir = new File("demo.txt");
if(!dir.exists()){
dir.mkdir();
System.out.println("目录已创建");
}else{
System.out.println("该目录已存在!");
}
dir.delete(); // 如果删除的是目录,并且目录下有子文件或者子目录则会删除失败。
System.out.println(dir.exists());
}
}

3.多级目录

  多级目录的创建,删除。

 import java.io.File;

 //创建一个多级目录
public class File_mkdirs {
public static void main(String[] args) {
//在当前目录下创建目录:a/b/c/d/e/f
File dir = new File("a"+File.separator+"b"+File.separator+
"c"+File.separator+"d"+File.separator+"e"+File.separator+"f"); if(!dir.exists()){
//mkdirs在创建当前File表示的目录时会将所有不存在的父目录一同创建出来。而mkdir不具备这样的功能.
dir.mkdirs();
System.out.println("目录已创建!");
}else{
System.out.println("目录已存在!");
} delete(new File("a"));
} //删除file文件或者file目录及其所有文件
public static void delete(File file){
if(file.isDirectory()){
//将该目录子项全部清除
File[] subs = file.listFiles();
for(int i=0;i<subs.length;i++){
delete(subs[i]);
}
}
file.delete();
}
}

4.文件过滤器

 import java.io.File;

 //获取一个目录中的所有子项
public class File_listFiles {
public static void main(String[] args) { File dir = new File(".");
/*
* boolean isFile()
* 判断当前File表示的是否为文件
*
* boolean isDirectory()
* 判断当前File表示的是否为目录
*/
//判断是否为目录
if(dir.isDirectory()){
/*
* File[] listFiles()
* 返回的数组中每个元素为该File表示的目录中的一个子项
*/
File[] subs = dir.listFiles();
for(int i = 0; i < subs.length; i++){
System.out.println(subs[i].getName());
}
} }
}

listFiles

 import java.io.File;
import java.io.FileFilter; //File提供了一个重载的listFiles方法,允许传入一个FileFilter(文件过滤器),
//然后将当前File表示的目录中满足该过滤器要求的子项返回.
public class FileFilterDemo1 {
public static void main(String[] args) {
//获取当前目录中所有名字以"."开头 的子项
File dir = new File(".");
FileFilter filter = new FileFilter(){
//添加过滤条件,只要认为参数给定的file满足要求,则返回true即可
public boolean accept(File file) {
String name = file.getName();
System.out.println("正在过滤:"+name);
return name.startsWith(".");
} };
File[] subs = dir.listFiles(filter);
for(int i = 0; i < subs.length; i++){
System.out.println(subs[i].getName());
}
}
}
 import java.io.File;
import java.io.FileFilter; public class FileFilterDemo2 {
public static void main(String[] args) {
File file = new File("D:\\"); // FileFilter---文件过滤器
// 只获取D盘下的子文件
File[] fs = file.listFiles(new FileFilter() {
// 指定筛选规则
@Override
public boolean accept(File pathname) {
return pathname.isFile();
}
});
for(File f : fs){
System.out.println(f);
}
}
}

FileFilterDemo2

5.文件名过滤器

 import java.io.File;
import java.io.FilenameFilter; public class FileNameFilterDemo {
public static void main(String[] args) { File file = new File("D:\\"); // FilenameFilter---文件名过滤器
File[] fs = file.listFiles(new FilenameFilter() { @Override
public boolean accept(File dir, String name) {
return name.matches(".*[nN].*");
}
});
for (File f : fs) {
System.out.println(f);
}
}
}

其它文件操作练习:

1.统计java文件的个数

 import java.io.File;

 public class FileCountJavaFile {
public static void main(String[] args) {
File dir = new File("E:\\xs_daidaicgb\\java projects\\03API\\day17");
System.out.println(countJava(dir));
}
public static int countJava(File file){
if(file == null){
return 0;
}
if(!file.isDirectory()){
if(file.getName().endsWith(".java"))
return 1;
else
return 0;
}else{
int sum = 0;
File[] fs = file.listFiles();
for(File f : fs){
sum += countJava(f);
}
return sum;
}
}
}

2.将所有pdf文件提取到D:PDF下

 import java.io.File;

 public class FileTypeFind {
public static void main(String[] args) {
File file = new File("D:\\01javaBasic");
//将D:\\01javaBasic下的pdf文件提取到D:\\PDF\\下
getTypeFile(file,"D:\\PDF\\","pdf");
System.out.println("over");
}
/**
* 将原文件中的制定类型文件,剪切到指定地址。若有重名文件自动用_数字标号。
* @param srcFile 需要操作的文件
* @param destPath 将筛选出来的文件存入destPath
* @param findType 制定类型的文件,例如pdf,txt,docx等
*/
public static void getTypeFile(File srcFile, String destPath, String findType){
if(srcFile == null){
throw new NullPointerException("文件不能为空!");
}
if(srcFile.isDirectory()){
File[] fs = srcFile.listFiles();
for(File f : fs){
if(f.isDirectory())
System.out.println(f);
getTypeFile(f,destPath,findType);
}
}else{
if(srcFile.getName().endsWith("."+findType)){
File dir = new File(destPath+srcFile.getName());
if(dir.exists()){
int count = 0;
String fileName = srcFile.getName().substring(0,srcFile.getName().lastIndexOf("."));
while(dir.exists()){
count++;
dir = new File(destPath+fileName+"_"+count+"."+findType);
}
srcFile.renameTo(new File(destPath+fileName+"_"+count+"."+findType));
}else{
srcFile.renameTo(new File(destPath+srcFile.getName()));
}
}
}
}
}

效果:

【java学习笔记】文件操作