public boolean isValid(String username, String password) {
boolean valid = false;
DataInputStream file = null;
try{
Scanner files = new Scanner(new BufferedReader(new FileReader("files/students.txt")));
while(files.hasNext()){
System.out.println(files.next());
}
}catch(Exception e){
e.printStackTrace();
}
return valid;
}
为什么我在读取由UTF-8编写的文件时(通过另一个java程序),它会显示奇怪的符号,后跟其字符串名称?
I wrote it using this
private static void addAccount(String username,String password){
File file = new File(file_name);
try{
DataOutputStream dos = new DataOutputStream(new FileOutputStream(file,true));
dos.writeUTF((username+"::"+password+"\n"));
}catch(Exception e){
}
}
答案 0 :(得分:7)
这是一种简单的方法:
map[string]interface{}
答案 1 :(得分:0)
来自FileReader
Javadoc:
读取字符文件的便捷类。此类的构造函数假定默认字符编码和默认字节缓冲区大小是适当的。要自己指定这些值,请在FileInputStream上构造一个InputStreamReader。
所以也许像new InputStreamReader(new FileInputStream(file), "UTF-8"))
答案 2 :(得分:0)
使用DataOutput.writeUTF
/ DataInput.readUTF
时,前2个字节构成一个无符号的16位大端整数,表示字符串的大小。
首先,读取两个字节并用于构造无符号的16位整数,其方式与
readUnsignedShort
方法完全相同。此整数值称为 UTF长度,并指定要读取的其他字节数。然后通过将它们分组考虑将这些字节转换为字符。每个组的长度是从组的第一个字节的值计算的。组后面的字节(如果有)是下一组的第一个字节。
这些可能是导致您的问题的原因。您需要跳过前2个字节然后指定Scanner
使用UTF-8才能正确读取。
话虽如此,我认为没有理由在这里使用DataOutput
/ DataInput
。您只能使用FileReader
和FileWriter
代替。这些将使用默认的系统编码。