проблема при открытии файла с несколькими пробелами с помощью cmd - PullRequest
3 голосов
/ 20 апреля 2011

Я вызываю приведенную ниже команду, используя Java

Это инициализация Java

String fileName="C:\\temp\\A  a.txt";
String  sCmd = "cmd /c start \"\" \"" + fileName + "\"";

Это то, что я получаю, когда печатаю sCmd

 cmd /c start '" 'C:\temp\A   a.txt'

Вот так я запускаю команду

 Runtime.getRuntime().exec(sCmd);

Имя файла содержит несколько пробелов, и когда я запускаю эту команду из Java, выдается ошибка, потому что он не распознает несколько пробелов. Он работает, когда нет пробелов или один пробел? Как обрабатывать файлы с несколькими пробелами с помощью команды windows

Пример Java-программы

   import java.io.File;
import java.io.IOException;

public class A
{
    public static void main(String[] args)
    {
        String fileName = "C:\\temp\\a  dfdfd   f.txt";
        File file = new File(fileName);
        String sCmd = "cmd /c start \"\" \"" + file.getAbsolutePath() + "\"";

        System.out.println("exec cmd=<" + sCmd + ">");
        try
        {
            Runtime.getRuntime().exec(sCmd);
        }
        catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

Это дает мне ошибку, когда со стороны Windows, когда я запускаю код Java.

Это вывод Java

exec cmd=<cmd /c start "" "C:\temp\a  dfdfd   f.txt">

и я работаю в Windows XP, далее не открывается ни один файл, оставьте в стороне один с пробелами.

Решение:

import java.io.File;
import java.io.IOException;

public class A
{
    public static void main(String[] args)
    {
        // String fileName = "C:\\temp\\a.txt";
        String fileName = "C:\\temp\\a  dfdfd   f.txt";
        File file = new File(fileName);
        String sCmd = "cmd /c start \"\" \"" + file.getAbsolutePath() + "\"";

        System.out.println("exec cmd=<" + sCmd + ">");
        try
        {
            Runtime.getRuntime().exec(sCmd.split(" "));
        }
        catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

Ответы [ 2 ]

5 голосов
/ 20 апреля 2011

cmd /c start "C:\temp\A a.txt" работает из командной строки.Вам нужно будет избегать двойных кавычек в приведенной выше команде с обратной косой чертой, если эта команда вызывается через Java Runtime.getRuntime().exec(...)

1 голос
/ 20 апреля 2011

Я не совсем уверен, что ты делаешь, но если это просто cmd /c start <filename>, то здесь слишком много кавычек.

String  sCmd = "cmd /c start \"\" \"" + fileName + "\"";

Это должно быть

String  sCmd = "cmd /c start \"" + fileName + "\"";

В сторону:

Это то, что я получаю, когда печатаю sCmd

cmd /c start '" 'C:\temp\A   a.txt'

Я не вижу, как вы можете получить одинарные кавычки в выводе, когда их нет в вашей строке!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...