2014-10-09 137 views
0

我想使用InputStreamReader读取二进制文件(pdf,doc,zip)。我使用FileInputStream实现了这一点,并将文件的内容保存到一个字节数组中。但我已经被要求使用InputStreamReader来做到这一点。所以,当我试图打开并使用JAVA:使用InputStreamReader打开并读取文件

File file = new File (inputFileName); 
Reader in = new 
InputStreamReader(new FileInputStream(file)); 
char fileContent[] = new char[(int)file.length()]; 
in.read(fileContent); in.close(); 

例如读取PDF文件,然后使用

File outfile = new File(outputFile); 
Writer out = new OutputStreamWriter(new FileOutputStream(outfile)); 
out.write(fileContent); 
out.close(); 

一切都保存这些内容到另一个PDF文件去罚款(不例外或错误),但当我试图打开新文件时,它说它已损坏或编码为wrond。

任何建议?

PS1我特别需要这样的InputStreamReader使用

PS2尝试读取/写入.txt文件

回答

1

不要使用读/写器API时,它工作正常。使用二进制流而不是:

File inFile = new File("..."); 
File outFile = new File("..."); 
FileChannel in = new FileInputStream(inFile).getChannel(); 
FileChannel out = new FileOutputStream(outFile).getChannel(); 

in.transferTo(0, inFile.length(), out); 
+0

是的,我知道,最简单的方法是使用字节,但我已经被要求用InputStreamReader来做到这一点,我不知道是否有可能以这种方式正确读取二进制文件的内容 – yakamuki 2014-10-09 14:32:09

+0

读写器API被设计为读取文本数据。通常你应该在里面指定文本的编码。这个api不适用于二进制数据 – ursa 2014-10-09 14:33:21

+0

,所以使用InputStreamReader不可能使用它?实际上,我必须做一种加密,为每个字符添加一个随机数,然后如果我从加密文件中分出相同的数字,它必须再次与原始数字相同。我做了使用字节,但我不能用字符做到这一点,当我甚至不能正确读取它们 – yakamuki 2014-10-09 14:40:32

0

String, char, Reader, Writer是在Java 文本。这个文本是Unicode的,因此所有的脚本都可以合并。

byte[], InputStream, OutputStream用于二进制数据。如果它们代表文本,则它们必须与某种编码相关联。

文本和二进制数据之间的桥梁总是涉及转换。

你的情况:

Reader in = new InputStreamReader(new FileInputStream(file), encoding); 
Reader in = new InputStreamReader(new FileInputStream(file)); // Platform's encoding 

第二个版本是不可移植的,因为其他计算机可以有任何编码。

在你的情况下,不要使用InputStreamReader作为二进制数据。转换只能破坏东西。

也许他们打算表示:不要全部读取字节数组。在这种情况下,使用BufferedInputStream重复读取小字节数组(缓冲区)。

+0

我试过了第一种方式,但是我找不到二进制文件有什么编码。 (如pdf)。我已经尝试了所有常见的编码,但没有任何结果。我试图用Input StreamReader来做这件事的原因是因为我被要求这么做,而且我不知道是否可以用InputStreamReader正确读取二进制文件的内容。 – yakamuki 2014-10-09 14:35:05

+0

来自zip的二进制数据不能被合理地转换为文本。您可以使用“StandardCharsets.ISO_8859_1”,ISO-8859-1或Latin 1,一种单字节编码。并使用OutputStreamWriter转换回来。 – 2014-10-09 15:35:10

相关问题