2013-04-25 4 views
-1

Я создал простую программу, которая запрашивает у пользователя имя папки, в которой позже будут скопированы некоторые файлы. Проблема заключается в том, что имя папки будет содержать нелицовые (греческие) символы. И хотя папка создается с правильным именем и без ошибок, когда я храню ее AbsolutePath в String, греческие символы получаются так: ?????? _22-03-2012. Поэтому, когда я пытаюсь использовать сохраненный путь для отправки скопированных файлов, я получаю ошибку, потому что java не может правильно прочитать путь!Кодирование пути к файлу Java?

Любые идеи? (Очевидно, я новичок в Java, так голые со мной плз!)

package newOrderAndXCopy; 

import java.io.File; 
import javax.swing.JOptionPane; 
import initiate.*; 

public class NewOrder { 

private String orderPath = null; 

//constructor 
public NewOrder() {  

    if(newOrderName()) { 

     File nO = new File(orderPath); 
     nO.mkdir(); 

    }  

} 

public boolean newOrderName() { 
    boolean name = false; 
    int counter = 3; 
    while(counter > 0) { 

     String test = JOptionPane.showInputDialog("Here I ask the user to give the order name with this form -> ΠΑΡΑΛΑΒΗ ΧΧ-ΧΧ-ΧΧΧΧ (π.χ. ΠΑΡΑΛΑΒΗ 12-04-2013):"); 
     if(!test.matches("ΠΑΡΑΛΑΒΗ \\d{2}-\\d{2}-\\d{4}")) { 

      JOptionPane.showMessageDialog(null, "Wrong name!", "Error", JOptionPane.ERROR_MESSAGE); 
      counter--; 

     } 
     else { 
          //replace the space with underscore 
      String rep = Config.savesPath + test.replaceAll(" ", "_") + "/"; 

      File no = new File(rep); 
      if(!no.exists()) { 
       orderPath = rep; 

       --> Config.orderPath = no.getAbsolutePath(); <-- 
       /*This part is where it gets messy. The folder is created but this value is wrong so I can't use it later!*/ 
       name = true; 
       JOptionPane.showMessageDialog(null, "The order folder was created!!", "Success!", JOptionPane.INFORMATION_MESSAGE); 
       break; 
      } 
      else { 
       JOptionPane.showMessageDialog(null, "The order with this name already exists!Pick another Name!", "Error", JOptionPane.ERROR_MESSAGE); 
      } 

     } 

    } 
    return name; 
} 
} 
+0

Это может быть проблема отображения, а не проблема с тем, как данные хранятся в вашем файле «Файл». Можете ли вы показать код, который демонстрирует, как вы создаете файл и как вы печатаете путь? –

ответ

0

Посмотрите на this answer.

String encoding = "UTF-8"; 
new PrintWriter(new OutputStreamWriter(new FileOutputStream(file), encoding)) 
new BufferedReader(new InputStreamReader(new FileInputStream(file), encoding)) 

Проблема может заключаться в использовании FileWriter или выходе из параметра кодирования (по умолчанию кодирования платформы).

Для чтения файла вам необходимо установить кодировку в редакторе вправо. Или напишите HTML, где вы можете указать кодировку.

+0

Нет, поскольку я сказал, что папка создается! Проблема заключается в том, что когда я храню его absolutePath в String, чтобы использовать его как путь назначения позже, он хранится с нелатинскими символами в качестве вопросительных знаков. Тем не менее, фактическое имя созданных папок. – user1712246

+0

'String test = JOptionPane.showInputDialog' (сохранение в строке # 1) все еще в порядке. 'Config.savesPath', скорее всего, неверно. Как вы его получите? Если из .properties (ISO-8859-1) это должно быть с кодами '\ uXXXX'. –

+0

Config.savesPath в порядке, поскольку он состоит только из латинских символов. Config.targetPath является проблематичным, и я получаю его, прося абсолютный путь к файлу. – user1712246

0

Ваше приложение должно обрабатывать нелатинские символы, поэтому убедитесь, что кодировка по умолчанию поддерживает это.

System.setProperty("file.encoding", "UTF-8"); 
Смежные вопросы