文章目录

  • 用java 实现三个工具类

    • 1. 输入路径,该工具会将该路径下的所有文件列出来
    • 2. 输入路径,该工具会将该路径下的文件、文件夹的数量统计出来
    • 3. 实现copy 功能(有点简陋,,细节没有处理)
    • 后记

用java 实现三个工具类

1. 输入路径,该工具会将该路径下的所有文件列出来

这个是使用NIO的path和files 来进行的,非常的方便

class T1 {public void ergioc(String path) throws IOException {Files.walkFileTree(Paths.get(path), new SimpleFileVisitor<Path>() {//访问目录@Overridepublic FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {System.out.println("正在访问 " + dir + "目录");return FileVisitResult.CONTINUE;}@Overridepublic FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {return super.visitFileFailed(file, exc);}@Overridepublic FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {//当访问到目录之后,出发的方法return super.postVisitDirectory(dir, exc);}@Overridepublic FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {System.out.println("正在访问的文件 : " + file + "文件");return FileVisitResult.CONTINUE;}});}
}

2. 输入路径,该工具会将该路径下的文件、文件夹的数量统计出来

** 通过简单的遍历和递归实现的一个小功能,**

class T2 {int dirCount = 0;int fileCount = 0;public void Count1(String path) {File file = new File(path);File[] listFile = file.listFiles();for (int i = 0; i < listFile.length; i++) {if (listFile[i].isDirectory()) {dirCount++;Count1(listFile[i].toString());} else if (listFile[i].isFile()) {fileCount++;} else {Count1(listFile[i].toString());}}}public void sc() {System.out.println("文件数 :" + fileCount);System.out.println("目录数 : " + dirCount);}}

3. 实现copy 功能(有点简陋,,细节没有处理)

** 这个没用NIO2 ,如果有时间的话,我可以尝试下**

class T3 {//写一个总的方法来引用这个方法,,然后进行public void  toatal(String path , String path1){File file1 = new File(path);File file2 = new File(path1);if (!file2.exists()){System.out.println("暂时没有写 合并,,该文件或文件夹已经存在");}else {CountCatalog(path,path1);copyFile(path,path1);}}/*** 如何通过java实现一个cpoy 功能 ; 如果是目录则递归进行复制,如果是文件,则直接复制* 1. 首先 得到想要复制的文件或文件目录,* 2. 如果是文件目录得到目录里面是否有 目录或者是文件** 首先输入的路径是 第一个是被复制的文件或者文件夹  第二是 目的路径地址**/public void copyFile(String path, String path1) {File file = new File(path);File file1 = new File(path1);File[] listFile = file.listFiles();//如果不行,就用三个方法来合成起来for (int i = 0; i < listFile.length; i++) {if (listFile[i].isDirectory()) {copyFile(listFile[i].toString(), file1.getPath().toString());} else if (listFile[i].isFile()) {String la = listFile[i].toString().substring(11,listFile[i].toString().length());String tmp = file1.toString() + la;File tmp1 = new File(tmp);try {if(tmp1.createNewFile()){FileInputStream fileInputStream = new FileInputStream(listFile[i].toString());FileOutputStream fileOutputStream = new FileOutputStream(tmp);int hasRead = 0;byte[] bbuf = new byte[1024];while ((hasRead = fileInputStream.read(bbuf)) > 0){fileOutputStream.write(bbuf);}System.out.println(tmp +"      创建成功");fileInputStream.close();fileOutputStream.close();}else {System.out.println("文件已经存在");}} catch (IOException e) {e.printStackTrace();}finally {}// 将父目录代替String mulu1 = listFile[i].toString().replace(la, file1.toString());} else {copyFile(listFile[i].toString(), file1.getPath().toString());}}}/*** 我觉得应该使用递归 是更加的方便的,* 1. 首先, 你复制的文件或者目录是不一样的,如果是文件 那么 路径就是代表的文件* 2. 如果是目录, 但是你复制的目录的父目录 然后的子目录,所以你先要创建父目录* 3. 或者不是使用递归,而是使用树图或者说是回溯法,是不更加的方便 ???????????????** @param path*/public void CountCatalog(String path, String path1) {File file = new File(path);File file1 = new File(path1);File[] listFile = file.listFiles();// 首先是不该判断是否是这个 目录是否在这个地方是否存在,如果存在,现在现在先不写合并// 如果没有 首先你要创建父目录// 然后通过递归得到下面的目录和文件// 但是 目录会自动根据文件的绝对路径进行创建的,所以的,使用mkdirs 可以直接并且非常的方便/*** 现在的难点就是 : 前面获取的路径 可是并不能使用啊** 我可以 通过字符串的形式, 去确定修改绝对路径不就行了吗*/for (int i = 0; i < listFile.length; i++) {if (listFile[i].isDirectory()) {// 父目录//父目录不可变所以提到for语句上面String la = listFile[i].getParent();// 将父目录代替String mulu1 = listFile[i].toString().replace(la, file1.toString());File tmp = new File(mulu1);// 创建目录if (tmp.mkdirs()) {System.out.println(mulu1 + "      创建成功");} {System.out.println("文件夹已经存在");}//第二个参数,,只是在每个递归中保存这个路径CountCatalog(listFile[i].toString(), mulu1);}else if (listFile[i].isFile()){} else {CountCatalog(listFile[i].toString(), file1.getPath().toString());}}}
}

后记

如果你有更好的方法,可以与我分享,

转载于:https://www.cnblogs.com/YJBlog/p/10440703.html

用java实现 两个工具和一个copy功能相关推荐

  1. 在JAVA中用两个栈实现队列的功能

    此问题的实现可以加深对栈和队列的理解,让我们先来认识一下栈和队列 1.Stack栈 栈(Stack)是一种后进先出(LIFO)的数据结构 Stack只有入栈和出栈的操作,常用方法有: (1)把元素压栈 ...

  2. java实现-两个栈实现一个队列和两个队列实现一个栈

    1.两个栈实现一个队列 思路:压入元素直接入stack1,删除元素先判断stack2中是否为空,如果不为空直接弹出:为空则将stack1中的元素取出压入 stack2中再弹出. 代码: import ...

  3. java中两个doub组成一个数组_Java基础知识2-Java基本语法

    数据类型 1.Java程序的基本组成 关键字:被Java语言赋予特定含义的单词,不能作标识符,如private. 标识符:由数字.字母.$和_组成的字符串,用于引用变量.且首字母不能是数字. 变量:程 ...

  4. Java简易转码工具(一个字符串编码是GBK的文本文件,内容转成UTF-8编码)

    import java.io.*; import java.nio.charset.StandardCharsets;/*** 当前项目目录下有一个文本文件note.txt,字符串编码* 是GBK的, ...

  5. java中将两数组拼接为一个数组

    思路为: 首先声明两个数组: int [] x=new int[]{1,2,3,4,5}; int [] y=new int[]{6,7,8}; 此时需要第三数组来接受这两个数组,而且第三个数组的长度 ...

  6. java字节码编辑工具_2200 Star!功能强大的 Java 字节码编辑器!

    [导语]:Recaf是一款功能十分强大的Java字节码编辑器,基于objectweb的ASM构建,可以更好地显示文件的属性,并为字节码编辑提供方便. 简介 Recaf是一个易于使用的现代的Java字节 ...

  7. 强烈推荐:程序员必备的两个超级工具,一个是百宝箱,一个是百宝库

    跟着我一起进步 大家好,我是你们的校长. 我最近发现我应该好久没有给大家推荐一些好东西,好工具了.周末了,静下心来,想了想,今天必须给大家推荐两个好东西,一个可以说是百宝箱,一个是可以说百宝库.前方高 ...

  8. 太恐怖了 两天搞定一个项目 Java Web MVC 网络商城教程+源代码

    两天搞定一个项目 Java Web MVC 网络商城教程+源代码 最近自学做了一个网络商城将以下是代码和教程 环境搭建–数据库设计–页面设计-后台设计 本项目使用的jdk版本是 运行项目前需要先配置好 ...

  9. 3ml乐谱制作工具_每个数据科学家应在其下一个ml项目中使用两种工具

    3ml乐谱制作工具 by Braden Riggs and George Williams (gwilliams@gsitechnology.com) Braden Riggs和George Will ...

最新文章

  1. 关于RESTful名字的含义
  2. GDT、GDTR、LDT、LDTR的理解
  3. java常用代码总结
  4. 实践分享:开始用Cordova+Ionic+AngularJS开发App
  5. 线程销毁_多线程(2)-Java高级知识(9)
  6. ubuntu 命令记忆
  7. 一线数分师天天被喷不值钱,数据分析师如何“刷存在感”?
  8. vs2008 sp1补丁安装到最后一点点的时候,就无法安装下去了 解决方法[转]
  9. java 正则表达式 s_正则表达式 java
  10. visio画图——圆柱
  11. c语言头文件的使用和写法,C语言头文件的使用与写法
  12. Mac OS 内存管理知识
  13. 人均劳动生产率的单位_生产率的单位是什么?
  14. Axure8与Axure9交互差异总结-1 移动元件交互事件的差异
  15. 【生产调度】基于Harmony Search (HSPMS) 和 Shuffled Complex Evolution (SCEPMS) 实现并行机器调度附matlab代码
  16. 计算机无法连接蓝牙键盘,蓝牙鼠标连接不上电脑怎么办?
  17. html2canvas+canvas2image 做vue移动端页面海报
  18. 深入源码,CompletableFuture 简单与链式的区别?
  19. Flutter中的多选按钮组件Checkbox
  20. 视频剪辑使用的素材得怎么找?

热门文章

  1. 每天一道LeetCode-----将字符串切分,使每个子串都是回文串,计算所有可能结果和最小切分次数
  2. 每天一道LeetCode-----n皇后问题
  3. mac m1下安装kubenetes的dashboard
  4. 用golang完成tcp协议传输
  5. MFC使用CCommandLineInfo处理命令行
  6. Pixhawk的传感器数据(陀螺、加计等)流程
  7. 在Windows上使用VSCode远程链接到Linux上开发并调试C++程序
  8. Redis的设计与实现之跳表
  9. 二叉树的前中后序遍历之迭代法(非统一风格迭代方式)
  10. 英文单词 hard