我正在使用readFully
类RandomAccessFile
方法读取文件,但结果并非我所期望的结果。
这是一个简单的函数,它读取文件并使用存储所有字节的字节数组返回new String
:
public String read(int start)
{
setFilePointer(start);//Sets the file pointer
byte[] bytes = new byte[(int) (_file.length() - start)];
try
{
_randomStream.readFully(bytes);
}
catch(IOException e)
{
e.printStackTrace();
}
return new String(bytes);
}
主要:
public static void main(String[] args)
{
String newline = System.getProperty("line.separator");
String filePath = "C:/users/userZ/Desktop/myFile.txt";
RandomFileManager rfmanager = new RandomFileManager(filePath, FileOpeningMode.READ_WRITE);
String content = rfmanager.read(10);
System.out.println("\n"+content);
rfmanager.closeFile();
}
在RandomFileManager
的构造函数中调用此函数。如果文件已经存在,它会创建文件。
private void setRandomFile(String filePath, String mode)
{
try
{
_file = new File(filePath);
if(!_file.exists())
{
_file.createNewFile();// Throws IOException
System.out.printf("New file created.");
}
else System.out.printf("A file already exists with that name.");
_randomStream = new RandomAccessFile(_file, mode);
}
catch(IOException e)
{
e.printStackTrace();
}
}
我使用这种写方法写入文件:
public void write(String text)
{
//You can also write
if(_mode == FileOpeningMode.READ_WRITE)
{
try
{
_randomStream.writeChars(text);
}
catch(IOException e)
{
e.printStackTrace();
}
}
else System.out.printf("%s", "Warning!");
}
输出:
答案 0 :(得分:1)
我使用了writeChars方法。
将所有字符写为UTF-16,这不太可能是默认编码。如果您使用UTF-16BE字符编码,这将解码字符。 UTF_16每个字符使用两个字节。
如果您只需要(char) 0
和(char) 255
之间的字符,我建议使用ISO-8859-1编码,因为它的大小只有一半。
答案 1 :(得分:0)
问题是您没有指定Charset,因此正在使用“platform default”。这几乎总是一个坏主意。相反,请使用this constructor: String(byte[], Charset)并明确说明编写文件的编码。鉴于您显示的输出,它似乎是一个双字节编码,可能是UTF-16BE。
简答:字节不是字符