我有点难过,目前我正试图通过一个小的java应用程序(类似于gparted)列出我的系统中所有连接的设备我正在研究,我的最终目标是获取路径到设备,所以我可以在我的应用程序中格式化它,并执行其他操作,如标签,分区等。
我目前有以下命令返回“系统root”,它在Windows上将获得相应的驱动器(例如:“C:/ D:/ ...”)但在Linux上它返回“/”,因为这是它的技术根。我希望在数组中获得设备的路径(例如:“/ dev / sda / dev / sdb ...”)。
我现在正在使用
import java.io.File;
class ListAttachedDevices{
public static void main(String[] args) {
File[] paths;
paths = File.listRoots();
for(File path:paths) {
System.out.println(path);
}
}
}
任何帮助或指导都会非常感激,我对SO比较陌生,我希望这是足以涵盖所有内容的信息。
提前感谢您的任何帮助/批评!
编辑:
使用Phillip的部分建议我已经将我的代码更新为以下内容,我现在唯一的问题是检测所选文件是否与linux安装(不安全执行操作)或连接驱动器(安全)相关执行行动)
import java.io.File;
import java.io.IOException;
import java.nio.file.FileStore;
import java.nio.file.FileSystems;
import java.util.ArrayList;
import javax.swing.filechooser.FileSystemView;
class ListAttachedDevices{
public static void main(String[] args) throws IOException {
ArrayList<File> dev = new ArrayList<File>();
for (FileStore store : FileSystems.getDefault().getFileStores()) {
String text = store.toString();
String match = "(";
int position = text.indexOf(match);
if(text.substring(position, position + 5).equals("(/dev")){
if(text.substring(position, position + 7).equals("(/dev/s")){
String drivePath = text.substring( position + 1, text.length() - 1);
File drive = new File(drivePath);
dev.add(drive);
FileSystemView fsv = FileSystemView.getFileSystemView();
System.out.println("is (" + drive.getAbsolutePath() + ") root: " + fsv.isFileSystemRoot(drive));
}
}
}
}
}
编辑2:
忽略之前的编辑,我没有意识到这没有检测到尚未格式化的驱动器
答案 0 :(得分:0)
在Elliott Frisch's建议使用/ proc / partitions后,我想出了以下答案。 (请注意,这也会列出可启动/系统驱动器)
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
class ListAttachedDevices{
public static void main(String[] args) throws IOException {
ArrayList<File> drives = new ArrayList<File>();
BufferedReader br = new BufferedReader(new FileReader("/proc/partitions"));
try {
StringBuilder sb = new StringBuilder();
String line = br.readLine();
while (line != null) {
String text = line;
String drivePath;
if(text.contains("sd")){
int position = text.indexOf("sd");
drivePath = "/dev/" + text.substring(position);
File drive = new File(drivePath);
drives.add(drive);
System.out.println(drive.getAbsolutePath());
}
line = br.readLine();
}
} catch(IOException e){
Logger.getLogger(ListAttachedDevices.class.getName()).log(Level.SEVERE, null, e);
}
finally {
br.close();
}
}
}