2013-07-16 19 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

Путь @EJP исходит из String path является статическим, и он находится в другом классе, поэтому я называю его именем класса и использую этот путь здесь. здесь код 'общественного недействительными actionPerformed (ActionEvent arg0) { \t \t \t \t JFileChooser Chooser = новый JFileChooser(); \t \t \t \t FileNameExtensionFilter фильтр = новый FileNameExtensionFilter ( \t \t \t \t \t \t "Файл данных", "DAT"); chooser.setFileFilter (фильтр); int returnVal = chooser.showOpenDialog (getParent()); if (returnVal == 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.
Escape sequence Обычно используется в текстовых файлах в Windows, особенно в блокноте.

Ниже перечислены основные escape-последовательности Java. Они используются для представления неграфических символов, а также символов, таких как двойные кавычки, одинарные кавычки и обратные косые черты. Если вы хотите представить двойную кавычку в строковом литерале, вы можете сделать это с помощью \ ". Если вы хотите представить одну цитату в символьном литерале, вы можете сделать это с помощью. '

enter image description here

4

Это происходит потому, что File.seperator в Windows, является \. Каждый раз, когда вы позволяете своему пути String пройти через java.io.File, он заменит их. Поэтому, чтобы исправить это, либо не используйте Файл как вспомогательный инструмент, либо замените обратную косую черту косой чертой.

Итак, что происходит, так это то, что ваша строка path использует обратные косые черты. Вы извлекаете эту строку из java.io.File, которая автоматически будет использовать обратную косую черту в Windows. Если в пути содержится «channel_1», вы перезаписываете всю строку, используя строчную цепочку с косой чертой.

+0

Вы знаете решение этой проблемы? – Waqas

+1

Код не показывает, как и где он проходит через java.io.File, thogh. – Ingo

+0

Я знаю. Но я не знаю другого объяснения этого поведения, поэтому, я думаю, отсутствует часть кода. –

2

в дополнение к предыдущим ответам. Вы не должны использовать / или \ трудно закодированный в вашем приложении. Потому что это будет вредить портативности приложения. а использовать,

File.separator 

File#separator предоставляет вам, в зависимости от вашей системы.