IO基础(File类)
一、什么是文件?
文件简单的可以理解成,在外设硬盘上面保存数据的一种方式
文件一共可以由两部分构成:属性(文件大小,文件名,文件类型等)+内容(就是文件里面放的是什么)
在Java中要进行文件的处理操作是要通过本地操作系统支持的,在这之中如果操作的是同名文件,就可能出现延迟的问题。(开发之中尽可能避免文件重名问题)
二、File文件操作类
绝对路径与相对路径
绝对路径:是指目录下的绝对位置,直接到达目标位置,通常是从盘符开始的路径。完整的描述文件位置的路径就 是绝对路径 。
**相对路径:**相对与某个基准目录的路径 。
1、最常用的构造方法:
public File(String pathname) 创建指定路径文件对象
public File(String parent, String child) 创建指定路径文件对象,但要指明父路径和子路径
2,常用的方法:
代码如下:
编写文件的基本操作(如果文件不存在则进行创建;存在则删除)
import java.io.File;
import java.io.IOException;
public class FileDemo {
public static void main(String[] args) throws IOException {
String pathname = "C:\\my_java\\aaa.txt";
File file = new File(pathname);
if (file.exists()) { //文件存在,删除
file.delete();
System.out.println("文件" + pathname + "存在,删除之");
} else { //文件不存在,创建
try {
file.createNewFile(); //有创建失败的风险,需要捕捉异常
System.out.println("文件" + pathname + "不存在,创建之");
} catch (IOException e) { //文件部分异常,常见为IOException
System.out.println("文件" + pathname + "创建失败");
e.printStackTrace();
}
}
}
}
打印文件夹的内容
//显示文件夹的内容,包含子文件夹的内容
private static void listSub(String folder) {
File file = new File(folder);
File[] files = file.listFiles();
for (File f : files) {
System.out.println(f.getAbsolutePath()); //如果f是文件夹,把f这个子文件夹的内容也显示出来if ( f.isDirectory() ){
listSub(f.getAbsolutePath());//递归调用
}
}
实现文件夹的复制(需要借助字节输入输出流)
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* 描述:文件夹的复制
*/
public class Test1 {
public static void main(String[] args) {
String yuan = "";//需要填写原文件的绝对路径
String dest = "";//需要填写目标文件的绝对路径
copyFile(yuan,dest);
}
private static void copyFile(String yuan, String dest) {
File file = new File(yuan);
File[] files = file.listFiles();
for (File f : files) {
File destFile = new File(dest);
if (f.isFile()) {
copyof(destFile,f);
}else {
destFile.mkdirs();
copyFile(f.getAbsolutePath(),destFile.getAbsolutePath());
}
}
}
private static void copyof(File destFile, File f) {
try (FileInputStream fis = new FileInputStream(f);
FileOutputStream fos = new FileOutputStream(destFile)) {
byte[] bytes = new byte[1024];
int len = fis.read(bytes);
while (len != -1) {
fos.write(bytes);
len = fis.read(bytes);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}