【JavaSE】JavaIO操作

以下实现三个文件操作:
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("拷贝失败,源文件不存在,无法进行拷贝...");
        }
    }
}

猜你喜欢

转载自blog.csdn.net/eternal_01/article/details/81101868