2013-02-20 37 views
3

後返回不正確的文件名,我有一些Java代碼:的Java的GetFile使用SetFile

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

有人能告訴我我在做什麼錯嗎?另外,如果您有更好的跨平臺解決方案來顯示保存文件對話框,請與我分享。

+1

*「此外,如果你有更好的跨平臺解決方案,以顯示保存文件對話框,請分享和我一起。「* JFileChooser' Swing的一部分。奇怪的是,您添加了Swing標籤,但使用了基於AWT的組件。 – 2013-02-20 05:11:17

+0

@AndrewThompson但JFileChooser將不具備OS的本質外觀。 – user2080083 2013-02-20 05:12:59

+0

@ user2080083您使用的是什麼樣的外觀和感覺?系統的外觀和感覺,跨平臺的外觀和感覺還是別的? – MadProgrammer 2013-02-20 05:19:32

回答

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); 
    } 
} 
+0

和你的方法一樣。我將問題縮小到GetFile和SetFile。當我使用SetFile並設置一個比我要保存爲'abc.mp3'的文件名更長的文件名時,GetFile將返回一個字符串,比如'SExAKAxViCiOUS).mp3'。您是否將文件保存爲'abc.mp3'? – user2080083 2013-02-20 06:20:08

3

我有同樣的問題使用Java 1.7.0_21時。似乎只要你選擇的文件名或路徑比先前用setFile()設置的文件名或路徑短,那麼新文件將作爲getDirectory()的目錄(!)返回,getFile()返回先前的其餘部分文件名。 當使用Java 1.6時,它按預期工作,所以我想這是1.7中的一個錯誤。

編輯:
固定在:

+0

您可否評論這種錯誤修復是否適用於更高版本的JDK? – SOUser 2013-10-17 21:40:32

+0

在1.7.0_45中它仍然是一樣的。 – Ralf 2013-10-18 11:10:39

+0

確實。你知道這個bug是否已經在QC中列出? – SOUser 2013-10-18 13:20:04

相關問題