zoukankan      html  css  js  c++  java
  • 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:	esta
    F:	esta

    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)方法进行复制文件。

    7. 删除文件

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

    欢迎关注微信公众号【Java典籍】,收看更多Java技术干货!

       ▼微信扫一扫下图↓↓↓二维码关注

     

  • 相关阅读:
    el-select下拉框选项太多导致卡顿,使用下拉框分页来解决
    vue+elementui前端添加数字千位分割
    Failed to check/redeclare auto-delete queue(s)
    周末啦,做几道面试题放松放松吧!
    idea快捷键
    解决flink运行过程中报错Could not allocate enough slots within timeout of 300000 ms to run the job. Please make sure that the cluster has enough resources.
    用.net平台实现websocket server
    MQTT实战3
    Oracle 查看当前用户下库里所有的表、存储过程、触发器、视图
    idea从svn拉取项目不识别svn
  • 原文地址:https://www.cnblogs.com/bingyimeiling/p/11369206.html
Copyright © 2011-2022 走看看