文件操作
在Java语言里面提供有对于文件操作系统操作的支持,在java.io.File类中进行了定义。在整个java.io包里面,File类是唯一一个雨文件本身操作有关(创建、删除、重命名等)的类。要有完整的路径,而后才可以调用相应的方法处理。
File类是Comparable接口的子类所以File类的对象是可以进行排序处理的。进行File类处理的时候需要设置访问路径,对于路径的配置主要通过File类的构造方法进行处理:
- 构造方法:public File(String pathname)
,设置要操作完整路径;
- 构造方法:public File(File parent, String chiled)
,设置父路径和子目录
要想进行文件的基本操作,可以使用如下方法:
- 创建新的文件:public boolean createNewFile() throws IOEception
;
- 判断文件是否存在:public boolean exists()
;
- 删除文件:public boolean delete()
;
【范例】文件删除,创建,存在判断
package demo;
import java.io.File;
public class FileDemo {
public static void main(String[] args) {
File file = new File("d:\\file.txt");
if(file.exists()) {
file.delete();//删除文件
}else {
System.out.println(file.createNewFile());//创建文件
}
}
}
在不同的操作系统之间,会存在有不同的路径分隔符:Windows分隔符""、Linux分隔符"/",所以在最初进行开发时,就必须考虑不同环境下的分隔符的问题,File类提供有一个常量:public static final String separator
;
【范例】正常路径编写:
File file = new File("d:" + File.separateor + "file.txt");
虽则系统的适应性的不断加强,对于当前路径操作,也可以岁以写了:
File file = new File("d:/file.tex");
在进行文件创建的时候有一个重要的亲体:父路径必须首先存在。
- 如何获取父路径:
public File getParentFile
; - 创建目录:
public boolean mkdirs()
;
package demo;
import java.io.File;
import java.io.IOException;
public class FileDemo {
public static void main(String[] args) throws IOException {
File file = new File("d:" + File.separator + "hello" + File.separator+ "file.txt");
if(!file.getParentFile().exists()) {//父路径不存在
file.getParentFile().mkdirs();//创建父路径
}
if(file.exists()) {
file.delete();//删除文件
}else {//文件不存在
System.out.println(file.createNewFile());//创建文件
}
}
}
获取文件信息
- 文件是否可读:
public boolean canRead()
; - 文件是否可写:
public boolean canWrite()
; - 获取文件长度:
public long length()
,该方法返回的是long
数据类型、字节长度。 - 获得最后修改时间:
public long lastModified()
; - 判断是否是目录:
public boolean isDirectory()
; - 判断是否是文件:
public boolean isFile()
; - 列出目录内容:
public File[] listFiles()
;
package demo;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
class MathUtil {
private MathUtil() {
}
public static double round(double num, int scale) {
return Math.round(Math.pow(10, scale) * num) / Math.pow(10, scale);
}
}
public class FileDemo {
public static void main(String[] args) throws IOException {
File file = new File("d:" + File.separator + "22.jpg");
System.out.println("文件是否可读:" + file.canRead());
System.out.println("文件是否可写" + file.canWrite());
System.out.println("文件大小:" + MathUtil.round(file.length() / (double) 1024, 2) + "kb");
System.out.println("最后一次修改时间:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(file.lastModified()));
System.out.println("是否为目录:" + file.isDirectory());
System.out.println("是否为文件:" + file.isFile());
File file2 = new File("d:" + File.separator );
System.out.println("file2是否为目录:" + file2.isDirectory());
if(file2.isDirectory()) {
File result[] = file2.listFiles();
for(int i = 0; i < result.length; i++) {
System.out.println(result[i]);
}
}
}
}
文件是否可读:true
文件是否可写true
文件大小:46.6kb
最后一次修改时间:2020-03-24 20:44:26
是否为目录:false
是否为文件:true
file2是否为目录:true
d:\$RECYCLE.BIN
d:\1
d:\22.jpg
d:\abc.jpg
d:\adobeTemp
d:\Anacoda
d:\Android
d:\BaiduNetdisk
d:\BaiduNetdiskDownload
d:\Capture One 20
d:\centos6
d:\Config.Msi
d:\Dev-Cpp
d:\Dict
d:\Driver
d:\eclipse
d:\file.txt
d:\github
d:\hello
d:\imsdk_config
d:\imsdk_report
d:\informationSearch
d:\IntelliJ IDEA 2019.2.3
d:\iTunes
d:\Java
d:\latex
d:\lightroom
d:\mysql-8.0.19-winx64
d:\Navicat 15 for MySQL
d:\newfile
d:\notepad
d:\pics
d:\premiere pro
d:\Program Files
d:\Program Files (x86)
d:\ProgramData
d:\ps
d:\PSAutoRecover
d:\PyCharm 2019.3.1
d:\PyCharm Community Edition 2019.2.1
d:\Python
d:\QMDownload
d:\QQPCMgr
d:\QQPCMgr(1)
d:\Server
d:\Software
d:\Speed.log
d:\start
d:\System Volume Information
d:\TZKT
d:\Ubuntu
d:\VMware
d:\workspace
d:\YNote
d:\ZhiyunTranslator
d:\新建文件夹
d:\英雄联盟
d:\软件包源
d:\迅雷
File操作案例:列出指定目录中全部文件
要求:由开发者任意设置一个目录的路径,而后将这个目录中所有的文件的信息全部列出,包括子目录中的所有信息。
这样处理可以利用递归形式来完成:
package demo;
import java.io.File;
import java.io.IOException;
public class FileDemo {
public static void main(String[] args) throws IOException {
File file = new File("d:" + File.separator + "Java"); // 设置一个目录
ListDir(file);
}
public static void ListDir(File file) {
if (file.isDirectory()) {
File result[] = file.listFiles();
if (result != null) {
for (int x = 0; x < result.length; x++) {
ListDir(result[x]);//递归一次判断
}
}
System.out.println(file);//获得完整路径,此处如果把System.out.println(file)变成file.delete();将会是一个致命的程序,请慎重操作
}
}
}
File操作案例:批量修改文件名称
案例:编写程序,程序运行时输入目录名称,并把该目录下的所有文件名后缀改为.txt。
对于这类的操作必须设置一些假设的约定,能够重命名的文件都是有后缀的,如果没有后缀的路径则为其追加路径,如果有后缀的路径,则必须以最后的一个“.”进行截取。
package demo;
import java.io.File;
import java.io.IOException;
class MathUtil {
private MathUtil() {
}
public static double round(double num, int scale) {
return Math.round(Math.pow(10, scale) * num) / Math.pow(10, scale);
}
}
public class FileDemo {
public static void main(String[] args) throws IOException {
File file = new File("d:" + File.separator + "Test"); // 设置一个目录
long start = System.currentTimeMillis();
renameFile(file);
ListDir(file);
long end = System.currentTimeMillis();
System.out.println("本次花费时间:" + (end - start) + "毫秒");
}
public static void renameFile(File file) {
if (file.isDirectory()) {
File results[] = file.listFiles();
if (results != null) {
for (int x = 0; x < results.length; x++) {
renameFile(results[x]);
}
}
} else {
if (file.isFile()) {// 如果是文件,则重命名
String fileName = null;
if (file.getName().contains(".")) {
fileName = file.getName().substring(0, file.getName().lastIndexOf(".")) + ".txt";
System.out.println(fileName);
} else {
fileName = file.getName() + ".txt";
}
File newFile = new File(file.getParent(), fileName);
file.renameTo(newFile);
}
}
}
public static void ListDir(File file) {//列出当前文件目录下所有文件名
if (file.isDirectory()) {
File result[] = file.listFiles();
if (result != null) {
for (int x = 0; x < result.length; x++) {
ListDir(result[x]);
}
}
System.out.println(file);
}
}
}
参考资料:
https://edu.aliyun.com/lesson_1012_8978#_8978