为什么我的文件没有在stringbuilder中按需加载?

时间:2015-01-08 22:40:50

标签: java

我的代码是这样的

    try
    {
        StringBuilder sb = new StringBuilder("cmd.exe /C start " + gameExecutable);
        if (gameExecutable == null) {
            OptionPane.showMessageDialog(RunGameButton, "Could not find game executable automatically.");
            return;
        }
                if(selectedFiles != null) {
                    for(File mods : selectedFiles)
                    sb.append(" -file ").append(mods.getName());
                }
            }

但是,在加载我的文件时(例如:file1.pk3,file2.wad,file3.wad和file4.pk3),(假设gameExecutable是“game.exe”),它会加载cmd参数< / p>

game.exe -file "file1.pk3" "file2.wad" "file3.wad" "file4.pk3"

但是对game.exe的期望输出是

game.exe -file file1.pk3 -file file2.wad -file file3.wad -file file4.pk3

OR

game.exe -file "file1.pk3" -file "file2.wad" -file "file3.wad" -file "file4.pk3"

为什么不按所需方式加载?如何使用所需的输出加载它?

4 个答案:

答案 0 :(得分:2)

我认为selectedFiles是一个只有一个File对象的数组,该对象的名称是:

"file1.pk3" "file2.wad" "file3.wad" "file4.pk3"

这将是一个奇怪的名字,但并非无效,并会解释这种行为。

你可以用这个替换你的内心for

for(File mods : selectedFiles)
{
    System.out.println("This is a single file: " + mods.getName());
    sb.append(" -file ").append(mods.getName());
}

修改

我从未听说过JFileBrowser,但现在我看到its documentation我看到它的get方法被声明为:

public String get ()

因此,即使您选择了多个文件,它也会返回String,而不是Strings的数组,所以如果您执行了类似的操作:

File myFile = new File(browser.get())

然后它会创建一个File,上面有一个奇怪的名字。

答案 1 :(得分:0)

简而言之,我建议您尝试&gt;

enter image description here

答案 2 :(得分:0)

如果“selectedFiles”是一个集合,那么您的代码就可以运行:

for(File mods : selectedFiles)
    sb.append(" -file ").append(mods.getName());


我尝试了它,它按预期工作:

public class Test {
    public static void main(String[] args) {
        String selectedFiles[] = {"file1","file2","file3"};
        StringBuilder sb = new StringBuilder("cmd.exe /C start " + "game.exe");
        for(String file : selectedFiles)
            sb.append(" -file ").append(file);
        System.out.println(sb.toString());
    }
}


输出:
cmd.exe / C启动game.exe -file file1 -file file2 -file file3

答案 3 :(得分:-1)

我修复了问题。将System.out.println(sb.toString());添加到底部。当我将文件放在与gameExecutable相同的目录

时,它会根据需要加载

当他们不在同一个地方时,不知道为什么会引起问题。但它确实有效。