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

7. 删除文件

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