从文件中读取单词的代码会创建具有该名称的文件并写入内容,这与sw更改有关,直到最近才正常工作。更改了代码,字符集仍然出现错误
public class ForRwWr {
public static void main(String[] args) {
BufferedWriter bw = null;
FileWriter fw = null;
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
try {
BufferedReader in = new BufferedReader(new java.io.FileReader("F:\\words.txt"));
String str;
String fileName = "F:\\words.txt";
List<String> lines = Files.readAllLines(Paths.get(fileName), Charset.defaultCharset());
for (String Ad : lines) {
String FILENAME = "F:\\" + Ad + ".html";
try {
fw = new FileWriter(FILENAME);
bw = new BufferedWriter(fw);
bw.write("Orbital Science");
bw.write("Satellite Navigation");
bw.write("Satellite Navigation");
bw.write("Hongyan");
} catch (IOException d) {
d.printStackTrace();
} finally {
try {
if (bw != null)
bw.close();
if (fw != null)
fw.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
} catch (IOException d) {
d.printStackTrace();
} finally {
try {
if (bw != null)
bw.close();
if (fw != null)
fw.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
直到最近仍可正常使用,但现在出现错误
java.nio.charset.MalformedInputException:输入长度
更改了字符集,现在错误是
java.io.FileNotFoundException: F:\Wonderful .html (The filename, directory name, or volume label syntax is incorrect)
at java.io.FileOutputStream.open0(Native Method)
at java.io.FileOutputStream.open(FileOutputStream.java:270)
at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
at java.io.FileOutputStream.<init>(FileOutputStream.java:101)
at java.io.FileWriter.<init>(FileWriter.java:63)
at html.ForRwWr.main(ForRwWr.java:36)
java.io.FileNotFoundException: F:\ .html (The filename, directory name, or volume label syntax is incorrect)
at java.io.FileOutputStream.open0(Native Method)
at java.io.FileOutputStream.open(FileOutputStream.java:270)
at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
at java.io.FileOutputStream.<init>(FileOutputStream.java:101)
at java.io.FileWriter.<init>(FileWriter.java:63)
at html.ForRwWr.main(ForRwWr.java:36)
BUILD SUCCESSFUL (total time: 2 seconds)
Wonderful和Android是文件中的单词,直到最近令人担忧为止,它所做的只是tooc用户输入,并将其写入文件名中,就像昨天所担心的来自文件有趣事物技术的单词一样!今天是worc还是已经消失
答案 0 :(得分:2)
我认为问题是由UTF-8
以外的其他字符集引起的。确保已读取的字符集后,将其设置在
List<String> lines = Files.readAllLines(Paths.get(fileName), ---character set here---);
它可能是ISO-8859-1
或UTF-16
。
但是,reader
和in
对象(对象引用)在您的代码中似乎没用。
最后一点,最后的try-catch
是完全重复的代码!
答案 1 :(得分:1)
您阅读了F:\words.txt
两次:使用FileReader读一次-这是一个旧类,只能从当前平台读取默认的Charset.defaultCharset()
。
对于本地文件,这是不可移植的。
然后使用Files.readAllLines
作为UTF-8。
我的猜测是:
您可以使用以下方法进行测试:
List<String> lines = Files.readAllLines(Paths.get(fileName),
Charset.defaultCharset());
但是解决方案是将word.txt转换为UTF-8(因此所有语言和脚本都可以包含单词:例如façade和mañana。 NotePad ++ 或 JEdit这样的编辑器可能会这样做。