在java

时间:2017-04-26 14:22:21

标签: java linux ubuntu java-io

我有点难过,目前我正试图通过一个小的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:

忽略之前的编辑,我没有意识到这没有检测到尚未格式化的驱动器

1 个答案:

答案 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();
        }
    }
}