以下实现三个文件操作:
1. 判断父目录是否存在以及父目录的创建操作
2. 递归打印当前目录下所有层级的文件信息
3. 文件拷贝
/**
* 判断父目录是否存在以及父目录的创建操作
*/
public class Test{
public static void main(String[] args) {
File file=new File(File.separator+"D:" +File.separator+"java"+File.separator+"IO"+File.separator+"javaIO.java");
if(!file.getParentFile().exists()){ //父目录不存在创建父目录
file.getParentFile().mkdirs(); //有多少级父目录创建多少级
}
if(file.exists()){
file.delete(); //文件存在删除
}else{
try {
file.createNewFile(); //文件不存在创建
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
**
* 递归打印当前目录下所有层级的文件信息
* 重新启动启动一个线程进行打印,主要是为了防止如果listAllFiles()方法没有完成,那么对于main后续的执行将无法完
* 成。这种耗时的操作让主线程出现了阻塞,而导致后续代码无法正常执行完毕
*/
public class Test{
public static void main(String[] args) {
new Thread(()->{
File file=new File(File.separator+"E:" +
File.separator+"360Downloads");
listAllFile(file);
},"输出线程").start();
}
public static void listAllFile(File file){
if(file.isDirectory()){
File[] files=file.listFiles(); //列出当前路径下的所有文件
if(files!=null){
for (File file1:files){
listAllFile(file1);
}
}
}else{
System.out.println(file);
}
}
}
/**
* 文件拷贝
*/
class CopyFileUtil{
private CopyFileUtil(){} //这个工具类不需要任何属性,将构造方法私有化
/**
* 判断要拷贝的路径是否存在
* @param path 输入源路径信息
* @return 如果存在,返回true,否则返回false
*/
public static boolean fileIsExists(String path){
return new File(path).exists();
}
/**
* 判断父路径是否存在,不存在则创建
* @param path 输出目标的地址
*/
public static void createParentDir(String path) {
if (path == null) return;
File file = new File(path);
if (!file.getParentFile().exists()) { //父路径不存在
file.mkdirs(); //创建多级父目录
}
}
/**
* 文件拷贝
* @param srcPath 源文件路径
* @param destPath 目标文件路径
* @return 是否拷贝成功
*/
public static boolean copyFile(String srcPath,String destPath){
if(srcPath==null || destPath==null) return false;
File inFile=new File(srcPath);
File outFile=new File(destPath);
InputStream inputStream=null;
OutputStream outputStream=null;
try {
inputStream=new FileInputStream(inFile);
outputStream=new FileOutputStream(outFile);
long start= System.currentTimeMillis();
int temp=0;
byte[] bytes=new byte[1024];
while((temp=inputStream.read(bytes))!=-1){
outputStream.write(bytes,0,temp);
}
long end=System.currentTimeMillis();
System.out.println("文件拷贝总共耗时: "+(end-start)+"ms");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
outputStream.close();
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return true;
}
}
public class Test{
public static void main(String[] args) {
String sourcePath="E:\\data.txt";
String destPath="E:\\data1.txt";
if(CopyFileUtil.fileIsExists(sourcePath)){ //判断源路径是否存在
CopyFileUtil.createParentDir(destPath);
System.out.println(CopyFileUtil.copyFile(sourcePath,destPath)? "文件拷贝成功":"文件拷贝失败");
}else {
System.out.println("拷贝失败,源文件不存在,无法进行拷贝...");
}
}
}