Java学习笔记——文件操作

文件操作

在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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值