2013-07-16 220 views
0
  // Dividend Limit check or increase the Dividend 
     if (dival == 10) { 
      writer.println("Divident has reached it Limit !"); 
      i++; 
      // update the file name 
      String upath = "channel_" + i; 
      System.out.println(path); 
      // find channel_1 and replace with the updated path 
      if (path.contains("channel_1")) { 
       path = "D:/File Compression/Data/low_freq/low_freq/house_1/" 
         + upath + ".dat"; 
      } else { 
       JOptionPane.showMessageDialog(null, "Invalid File Choosen"); 
       System.exit(0); 
      } 

      dival = 10; 

     } else { 
      dival = dival + 10; 
      writer.println("Dividen:" + dival); 
     } 

這些行是遞歸方法。第一次給出了正確的道路:文件路徑問題: - >

D:/File Compression/Data/low_freq/low_freq/house_1/channel_2.dat 

但在第二把它翻轉正斜槓反斜槓:

D:\File Compression\Data\low_freq\low_freq\house_1\channel_1.dat 

,如果我不使用狀態下正常工作。

if(path.contains("channel_")) 
+0

您發佈的代碼不會出現此問題。 '路徑'從哪裏來? NB永遠不需要在Java文件名中使用反斜槓。 – EJP

+0

@JJP路徑來自String路徑是靜態的,它在其他類中,所以我從類名稱調用它並在此處使用該路徑。 這裏是代碼 '公共無效的actionPerformed(ActionEvent的爲arg0){ \t \t \t \t JFileChooser所選擇器=新的JFileChooser(); \t \t \t \t 的FileNameExtensionFilter濾波器=新的FileNameExtensionFilter( \t \t \t \t \t \t 「數據文件」, 「DAT」); chooser.setFileFilter(filter); int returnVal = chooser.showOpenDialog(getParent());如果(返回值== JFileChooser.APPROVE_OPTION){ path = chooser.getSelectedFile()。getAbsolutePath(); \t \t \t \t} \t \t \t}' – Waqas

回答

2

\被稱爲轉義序列在Java中用於各種目的。

在你的情況下使用File.separator

String path = "D:"+File.separator+"File Compression"+File.separator+"Data"+File.separator+"low_freq"+File.separator+"low_freq"+File.separator+"house_1"+File.separator; 

使用雙斜線\\!這是一種特殊的逃跑模式。像\ n或\ r。
轉義序列通常用於Windows中的文本文件,特別是在記事本中。

下面列出了主要Java轉義序列。它們用於表示非圖形字符以及雙引號,單引號和反斜槓等字符。如果您希望在字符串文字中表示雙引號,則可以使用\「如果您希望在字符文本中表示單引號,則可以使用\'來表示。」

enter image description here

4

這是因爲在Windows File.seperator\。每當你讓你的路徑字符串通過java.io.File它會取代它們。所以要解決這個問題,要麼不要使用File作爲輔助工具,要麼用正斜槓替換反斜槓。

所以,會發生什麼是您的path字符串使用反斜線。您檢索該字符串形式的java.io.File將自動在Windows上使用反斜槓。如果路徑包含「channel_1」,則使用帶正斜槓的硬編碼字符串覆蓋整個字符串。

+0

你知道解決這個問題呢? – Waqas

+1

代碼沒有顯示它是如何或通過java.io.File,thogh的地方。 – Ingo

+0

我知道。但據我所知,此行爲沒有其他解釋,所以我猜想缺少一部分代碼。 –

2

除了以前的答案。你不應該使用/\在應用程序中硬編碼,因爲這將損害您的應用程序的可移植性。而使用,

File.separator 

File#separator給你的,分離器取決於你的系統