使用java获取驱动器信息时

时间:2009-08-19 07:29:21

标签: java drive

我尝试了以下程序

import java.io.*;
class dr
{     
  public static void main(String args[])
    {
      try{
           File[] roots = File.listRoots();     
           for (int index = 0; index < roots.length; index++)    
           { //Print out each drive/partition          
            System.out.println(roots[index].toString());    
           }
         }
      catch(Exception e)
        { 
         System.out.println("error   " +e);
        }
    }
}

但在我的系统中,软盘驱动器未连接 我收到如下信息

“驱动器尚未准备就绪;其门可能已打开,请检查驱动器A:并确保已插入磁盘并且驱动器门已关闭” 然后三个选项显示取消,再试一次,继续 当我尝试继续时,它的工作原理 但我怎么能避免那个消息

4 个答案:

答案 0 :(得分:2)

你想做什么?

我的建议是使用FileSystemView

它使用了这样的东西:

FileSystemView fsv = FileSystemView.getFileSystemView();
File[] roots = fsv.getRoots();
for (File f: roots) {
    System.out.println(fsv.getSystemDisplayName(f);
}

答案 1 :(得分:2)

package com.littletutorials.fs;

import java.io.*;
import javax.swing.filechooser.*;

public class DriveTypeInfo
{
public static void main(String[] args)
{
    System.out.println("File system roots returned byFileSystemView.getFileSystemView():");
    FileSystemView fsv = FileSystemView.getFileSystemView();
    File[] roots = fsv.getRoots();
    for (int i = 0; i < roots.length; i++)
    {
        System.out.println("Root: " + roots[i]);
    }

    System.out.println("Home directory: " + fsv.getHomeDirectory());

    System.out.println("File system roots returned by File.listRoots():");
    File[] f = File.listRoots();
    for (int i = 0; i < f.length; i++)
    {
        System.out.println("Drive: " + f[i]);
        System.out.println("Display name: " + fsv.getSystemDisplayName(f[i]));
        System.out.println("Is drive: " + fsv.isDrive(f[i]));
        System.out.println("Is floppy: " + fsv.isFloppyDrive(f[i]));
        System.out.println("Readable: " + f[i].canRead());
        System.out.println("Writable: " + f[i].canWrite());
        System.out.println("Total space: " + f[i].getTotalSpace());
        System.out.println("Usable space: " + f[i].getUsableSpace());
    }
}

}

参考:http://littletutorials.com/2008/03/10/getting-file-system-details-in-java/

答案 2 :(得分:2)

对于Windows,这个class WindowsAltFileSystemView提出了一个基于FileSystemView

的替代方案
  

这个类是必要的,因为Windows NT上的一个恼人的错误,使用默认JFileChooser实例化FileSystemView每次都会导致“drive A: not ready”错误。
  我从1.3 SDK中获取了Windows FileSystemView impl并对其进行了修改*以便不使用java.io.File.listRoots()来获取fileSystem根目录。

     

java.io.File.listRoots()执行SecurityManager.checkRead()会导致操作系统尝试访问驱动器A:,即使没有磁盘,也会导致恼人的“{{1}每次我们实例化abort, retry, ignore时都会弹出消息!

所以在这里,我们的想法是扩展JFileChooser,将FileSystemView方法替换为:

getRoots()

答案 3 :(得分:0)

您可以使用它;

import java.io.File;
class dr
{     
  public static void main(String args[])
    {
         File[] roots=File.listRoots();
         for(File root:roots)
         {
             System.out.println(root.getName());
         }
    }
}