3

我有一些Java代码:

public static String getSaveFilePath(String title2)
  {
  FileDialog fd = new FileDialog(new Frame(), "Save As...", 1);
    fd.setFilenameFilter(new FilenameFilter() {
      public boolean accept(File dir, String name) {
        return name.endsWith(".mp3");
      }
    });
    fd.setFile(title2 + ".mp3");
    fd.setVisible(true);
    String str3 = fd.getFile();
    String str4 = fd.getDirectory();
    if (str4 == null) return null;
    str3 = str3.replace(".mp3", "");
    str3 = str3 + ".mp3";
    String str5 = str3;
    File localFile = new File(str4, str5);
    return localFile.getPath();
}

问题是当我使用setFile()将文件名设置为

NBA - In the Zone P.L. (Video by JESSExAKAxViCiOUS)

在显示对话框之前,当显示对话框时,我将文件另存为abc.mp3getFile()再次使用,我得到SExAKAxViCiOUS).mp3- 因为它应该返回我选择保存到的文件的名称,abc.mp3.

有人可以告诉我我在这里做错了什么吗?此外,如果您有更好的跨平台解决方案来显示保存文件对话框,请与我分享。

4

3 回答 3

3

我在使用 Java 1.7.0_21 时遇到了同样的问题。似乎每当您选择的文件名或路径短于您之前使用 setFile() 设置的文件名或路径时,getDirectory() 将作为目录(!)返回新文件,而 getFile() 将返回之前的其余文件文件名。使用 Java 1.6 时,它按预期工作,所以我猜这是 1.7 中的一个错误。

编辑:
固定在:

于 2013-05-28T15:31:28.480 回答
1

这是错误JDK-8021943:FileDialog getFile 在之前的 setFile 之后返回损坏的字符串

受影响的JVM版本:7u5、7u15、7u21、7u25、7u40

已为 Java 8 修复

于 2014-04-13T09:17:58.220 回答
0

功能getSaveFilePath很好,按我的预期工作。问题可能在于您如何使用它。您能否发布一段调用此函数的代码?

我是这样称呼它的:

public class FileDialogTest
{
    public static String getSaveFilePath(String title2)
    {
        FileDialog fd = new FileDialog (new Frame (), "Save As...", 1);
        fd.setFilenameFilter (new FilenameFilter ()
        {
            public boolean accept (File dir, String name)
            {
                return name.endsWith (".mp3");
            }
        });
        fd.setFile (title2 + ".mp3");
        fd.setVisible (true);
        String str3 = fd.getFile ();
        String str4 = fd.getDirectory ();
        if (str4 == null)
            return null;
        str3 = str3.replace (".mp3", "");
        str3 = str3 + ".mp3";
        String str5 = str3;
        File localFile = new File (str4, str5);
        return localFile.getPath ();
    }

    public static void main (String [] args) throws Exception
    {
        String title = "NBA - In the Zone P.L. (Video by JESSExAKAxViCiOUS)";
        title = getSaveFilePath (title);
        System.out.println (title);
    }
}
于 2013-02-20T06:05:08.747 回答