我有一些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.mp3
我用getFile()
再次,我得到SExAKAxViCiOUS).mp3
- 它应该返回我选择保存到的文件的名称,abc.mp3
.
有人可以告诉我我在这里做错了什么吗?另外,如果您有更好的跨平台解决方案来显示保存文件对话框,请与我分享。
我在使用 Java 1.7.0_21 时遇到同样的问题。似乎每当您选择的文件名或路径比您之前使用 setFile() 设置的文件名或路径短时,新文件将由 getDirectory() 作为目录(!)返回,并且 getFile() 返回前一个文件的其余部分文件名。
当使用Java 1.6时,它按预期工作,所以我猜这是1.7中的一个错误。
Edit:
固定于:
-
Java 7u60b01 http://download.java.net/jdk7u60/changes/jdk7u60-b01.html
(JDK-8024349:FileDialog getFile 在上一个 setFile 之后返回损坏的字符串 http://bugs.java.com/bugdatabase/view_bug.do?bug_id=8024349)
--> 抢先体验版本下载 https://jdk7.java.net/download.html
- Java 8 (JDK-8021943 http://bugs.java.com/bugdatabase/view_bug.do?bug_id=8021943)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)