java读取磁盘并遍历磁盘文件过程解析

 更新时间:2019年09月17日 09:43:28   作者:冰湖一角  
这篇文章主要介绍了java读取磁盘并遍历磁盘文件过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

1. 获取本机所有盘符信息

//1. 获取本机盘符
File[] roots = File.listRoots();
for (int i = 0; i < roots.length; i++) {
  System.out.print(roots[i].getPath()+"; ");//磁盘路径
  System.out.print(roots[i].getTotalSpace()/1024/1024/1024+"; ");//磁盘总空间大小
  System.out.print(roots[i].getUsableSpace()/1024/1024/1024+"; ");//剩余磁盘空间大小
  System.out.println(roots[i].getFreeSpace()/1024/1024/1024);//剩余磁盘空间大小
}

默认获取磁盘空间单位是BT,操作系统是这样算的 1G=1024MB, 1MB=1024KB, 1KB=1024BT

以上运行结果如下:

C:\; 119; 71; 71
D:\; 299; 233; 233
E:\; 309; 308; 308
F:\; 321; 320; 320
W:\; 588; 358; 358

其中W盘为网盘。

2. 仅获取本地磁盘(除去网络磁盘等)

File[] roots = File.listRoots();
FileSystemView sys = FileSystemView.getFileSystemView();
for (int i = 0; i < roots.length; i++) {
  if(!sys.getSystemTypeDescription(roots[i]).equals("本地磁盘")){
    continue;
  }
  System.out.println(roots[i].getPath());// 磁盘路径
}

输出结果:

C:\
D:\
E:\
F:\

3.在某一磁盘新建文件

File file = new File("F:\\test\\a\\b");
if (!file.exists()) {
  file.mkdirs();// 目录不存在,创建根目录
}

4. 遍历某一个盘符的文件

File file = new File("E:\\");
SimpleDateFormat dateFormat = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
System.out.println(file.getTotalSpace()/1024/1024/1024);// b-kb-M-G
if (file.isAbsolute()) { // 判断是否为根目录
  File[] list = file.listFiles(); // 使用数组接收带有完整路径的文件夹
  for (int i = 0; i < list.length; i++) {
    System.out.println(list[i].getPath());
    System.out.println(list[i].getTotalSpace()); 
    System.out.println(dateFormat.format(list[i].lastModified()));    
  }
}

5.遍历某一文件夹下的文件

File file = new File("F:\\test");
getAllFilePath(file);
public static void getAllFilePath(File dir){
  File[] files=dir.listFiles();
  for(int i=0;i<files.length;i++){
    if(files[i].isDirectory()){
      System.out.println(files[i].getPath());
      //这里面用了递归的算法 
      getAllFilePath(files[i]);  
    } else {
      System.out.println(files[i].getPath());
  }
  }
 }

输入结果:

F:\test\a
F:\test\a\b

6. 获取某一个盘符或文件夹下的所有文件的大小

File file = new File("F:\\test");
getAllFileSize(file);
public static long getAllFileSize(File dir){
  File[] files=dir.listFiles();
  for(int i=0;i<files.length;i++){
    if(files[i].isDirectory()){
      //这里面用了递归的算法 
      getAllFileSize(files[i]);
    } else {
      sum+=files[i].length();
      System.out.println(files[i]+"的大小:"+files[i].length());
  }
  }
  return sum;
 }

7. 保存文件

File filePath = new File("D:\\11.png");
String fileToday = DateUtils.formatTimeYMD(new Date());
//创建目录rootPath
String rootPath = "E:/fileUpload/"+fileToday+"/";
File file = new File(rootPath);
if (!file.exists()) {
  file.mkdirs();//目录不存在,创建根目录
}
String picPath = getPath(rootPath, "videoFile");
saveFile(picPath, filePath);
private static boolean saveFile(String path,File uploadFile) {
  //Files.copy(source, out);//可以直接用这个方法保存
  int bufferSize = 8192;//8kb
  //写文件
  try {
    File f = new File(path+"/", uploadFile.getName());
    if (!f.exists()) {
      f.createNewFile();
    }
    InputStream in = new BufferedInputStream(new FileInputStream(uploadFile),bufferSize);
    OutputStream out =new BufferedOutputStream(new FileOutputStream(f),bufferSize) ;
    byte[] buffer = new byte[bufferSize];
    int len = 0;
    while ((len = in.read(buffer)) >0) {
      out.write(buffer,0,len);
    }
    out.flush();
    out.close();
  } catch (IOException e) {
    e.printStackTrace();
    return false;
  }
  return true;
}

如果不需要推送进度的话,可以直接调用Files.copy(source, out)方法进行复制文件。

8. 删除文件

File filePath = new File("D:/home/logs/backupsystem_error.log");
boolean result = filePath.delete();//true表示删除成功
System.out.println(result);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Java使用lambda自定义Arrays.sort排序规则说明

    Java使用lambda自定义Arrays.sort排序规则说明

    这篇文章主要介绍了Java使用lambda自定义Arrays.sort排序规则说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • Java超详细分析讲解哈希表

    Java超详细分析讲解哈希表

    哈希表是一种根据关键码去寻找值的数据映射结构,该结构通过把关键码映射的位置去寻找存放值的地方,说起来可能感觉有点复杂,我想我举个例子你就会明白了,最典型的的例子就是字典
    2022-06-06
  • springboot如何设置请求参数长度和文件大小限制

    springboot如何设置请求参数长度和文件大小限制

    这篇文章主要介绍了springboot如何设置请求参数长度和文件大小限制,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • Spring Boot集成教程之异步调用Async

    Spring Boot集成教程之异步调用Async

    在项目中,当访问其他人的接口较慢或者做耗时任务时,不想程序一直卡在耗时任务上,想程序能够并行执行,我们可以使用多线程来并行的处理任务,也可以使用spring提供的异步处理方式@Async。需要的朋友们下面来一起看看吧。
    2018-03-03
  • Java String字符串内容实现添加双引号

    Java String字符串内容实现添加双引号

    这篇文章主要介绍了Java String字符串内容实现添加双引号,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • 简单了解SpringMVC全局异常处理常用方法

    简单了解SpringMVC全局异常处理常用方法

    这篇文章主要介绍了简单了解SpringMVC全局异常处理常用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • JAVA时间日期处理类实例

    JAVA时间日期处理类实例

    这篇文章主要介绍了JAVA时间日期处理类,可实现遍历两个日期之间的每一天的功能,涉及针对日期的常见操作技巧,需要的朋友可以参考下
    2015-04-04
  • 详解JAVA动态代理

    详解JAVA动态代理

    这篇文章主要介绍了JAVA动态代理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • Java中String和StringBuffer及StringBuilder 有什么区别

    Java中String和StringBuffer及StringBuilder 有什么区别

    这篇文章主要介绍了Java中String和StringBuffer及StringBuilder 有什么区别,String 是 Java 语言非常基础和重要的类,更多相关内容需要的小伙伴可以参考下面文章内容
    2022-06-06
  • SpringBoot集成Redis—使用RedisRepositories详解

    SpringBoot集成Redis—使用RedisRepositories详解

    这篇文章主要介绍了SpringBoot集成Redis—使用RedisRepositories详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03

最新评论