我制作了一个简单的应用程序,要求用户提供一个文件夹名称,稍后将复制一些文件。问题是文件夹名称将包含非lating(希腊)字符。虽然使用正确的名称创建文件夹并且没有错误,但是当我将AbsolutePath存储在String中时,希腊字符会像这样 ?????? _22-03-2012。因此,当我尝试使用存储的路径发送复制的文件时,我收到错误,因为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处写下你可以指出字符集的地方。
答案 1 :(得分:0)
您的应用需要处理非拉丁字符,因此请确保默认编码支持此功能。
System.setProperty("file.encoding", "UTF-8");