2010-06-05 2 views
7

В java вы можете использовать File.listRoots(), чтобы получить все диски в системе.Перечислить внешние накопители

Я ищу, чтобы получить только внешние диски, то есть USB-накопители, внешние жесткие диски, оптические диски, дискеты и т.д.

Есть ли способ сделать это в Java? Если нет, то родной код на C++ будет хорошим. В этом случае мне нужен код Windows и Linux.

+0

Как программное обеспечение будет знать, как монтируется диск? За исключением основного физического диска все диски могут монтироваться внутри или снаружи. Вероятно, есть способ загрузки с внешнего CD и доступа к внешнему диску без каких-либо приводов. –

ответ

0

Вы можете использовать WMI или смотреть в

GetRawInputDeviceList()

GetRawInputDeviceInfo()

Это поможет вам начать

C++

http://cboard.cprogramming.com/windows-programming/114294-getting-list-usb-devices-listed-system.html

Java

HTTP: // forums.java.net/jive/thread.jspa?threadID=37942

+0

Ваш ответ, похоже, склоняется к устройствам ввода (клавиатурам и мышам) вместо запоминающих устройств большой емкости. –

+0

У вас есть хороший момент! –

12

Чтобы получить информацию файловой системы, использовать что-то вроде:

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

public class DriveTypeInfo 
{ 
    public static void main(String[] args) 
    { 
     System.out.println("File system roots returned by FileSystemView.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()); 
     } 
    } 
} 

Также см. this, this и this вопрос.

+0

хорошо, он все еще не отвечает, если привод является внутренним или внешним –