Java-коды для запуска программы с обнаруженного диска

У меня есть программа, которую я хочу запустить с обнаруженного USB-накопителя (съемного хранилища, такого как USB), и это было сделано путем создания двух классов: external.java и DetectDrive.java следующим образом:

external.java

 public class external
 {
    public static void main(String args[]) throws InterruptedException  
    {

    DetectDrive d = new DetectDrive();
    String DetectDrive = d.USBDetect();
    BufferedWriter fileOut;
    String filePath = DetectDrive;
    System.out.println(filePath);

    try 
        {
        fileOut = new BufferedWriter(new FileWriter("F:\\external.bat"));
        fileOut.write("cd "+ filePath +"\n");
        fileOut.write("external.exe"+"\n");

        fileOut.close(); //close the output stream after all output is done
        Runtime rt = Runtime.getRuntime();
        Process p = rt.exec("cmd /c start" +DetectDrive+ "\\external.bat");
        p.waitFor();
        } catch (IOException e){
            e.printStackTrace();
            }       
    }
}

DetectDrive.java

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

public class DetectDrive
{
    public String USBDetect()
    {
        String driveLetter = "";
        FileSystemView fsv = FileSystemView.getFileSystemView();

        File[] f = File.listRoots();
        for (int i = 0; i < f.length; i++)
        {
            String drive = f[i].getPath();
            String displayName = fsv.getSystemDisplayName(f[i]);
            String type = fsv.getSystemTypeDescription(f[i]);
            boolean isDrive = fsv.isDrive(f[i]);
            boolean isFloppy = fsv.isFloppyDrive(f[i]);
            boolean canRead = f[i].canRead();
            boolean canWrite = f[i].canWrite();

            if (canRead && canWrite && !isFloppy && isDrive && (type.toLowerCase().contains("removable") || type.toLowerCase().contains("rimovibile")))
            {
                //log.info("Detected PEN Drive: " + drive + " - "+ displayName); 
                driveLetter = drive;
                break;
            }
        }

        /*if (driveLetter.equals(""))
        {
            System.out.println("Not found!");
        } 
        else 
        {
            System.out.println(driveLetter);
        }
        */

        //System.out.println(driveLetter);
        return driveLetter;
    }
}

Проблема в том, что при запуске external.java (main) ошибок нет. Однако в выходных данных отображается только обнаруженный диск F:\, но не запускается указанная программа external.exe, а также упоминается, что программа была прервана. Может кто-нибудь, пожалуйста, помогите мне указать, где я ошибся и какими должны быть правильные коды? Я новичок в Java.

Я получил коды DetectDrive от http://www.snip2code.com/Snippet/506/Detect-USB-removable-drive-in-Java которые, по моему мнению, сейчас находятся в обслуживании.

Можно ли изменить новый FileWriter (" F:\ external.bat "), чтобы вместо этого определять каталог USB-накопителя? Например, позволить программе определить USB-накопитель и автоматически поместить в правильный каталог вместо того, чтобы мы набирали F:\ вручную. У меня пока нет ответа на это. Пожалуйста помоги!

1 ответ

Решение

Кажется, проблема в команде:

"cmd /c start" +DetectDrive+ "\\external.bat"

Это должно иметь {space} после запуска:

"cmd /c start " +DetectDrive+ "\\external.bat"
Другие вопросы по тегам