Java 将blob图像中的字节写入txt文件
我编写这段代码是为了将我的一个文档从“blob”图像转换为txt文件。导出工作正常。当我打开文件时,它不仅包含文本,还包含其他信息,如文件名、路径,然后是模糊信息。 我附上一个例子: 文件名:new 1.txt 文本原始文件:CIAO6 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÿÿþÿÿÿþÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 5月5日的5月5日的5 5 5日日的5 5 5 5 5日的5 5 5 5日的5 5 5日的5 5 5 5日的5 5 5 5日的5 5 5日日的5 5 5 5日日的5 5 5日的5 5 5 5日的5 5 5 5日的5 5 5 5日日的5 5 5 5 5日日的5 5 5 5日日的5 5 5日的5 5 5日日的5 5 5 5 5日日的5 5日的5日的5 5 5日的5 5日的5 5日日的5 5 5日的5日的5 5 5日日的5 5 5 5日的5日的5 5 5日的5 5日的5 5 5 5 5日日日的5 5日的5日的5 5 5 5 5日日的5日的5 5日日的5 5 5 5日的5 5 5 5 5日的5 5 5 5 5 5 5 5 5 5 5日日的5日日日日日的5日日日的五、五、五、五、五、五、五、五、五、五、五、五、五、五、五、五、五、五、五、五、五、五、五、五、五、五、五、五、五、五、五‘C o m p o b jÿÿÿÿÿÿÿÿLÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿ þÿ ÿÿÿÀF OLE Package Packageô9²q\new 1.txt C:\Users\stefano\Desktop\new 1.txt 7 C:\Users\STEFAN~1.CER\AppData\Local\Temp\new 1(2).txt CIAO6 C:\U s e r s\s T e F A N~1。C E R\A p D A t A\L o C A L\t E m p\n E w 1(2)。t x t n e w 1。t x t*C:\U s e r s\s t f a n o\D e s k t o p\n e w 1。t×tJava 将blob图像中的字节写入txt文件,java,pdf,blob,document,corrupt,Java,Pdf,Blob,Document,Corrupt,我编写这段代码是为了将我的一个文档从“blob”图像转换为txt文件。导出工作正常。当我打开文件时,它不仅包含文本,还包含其他信息,如文件名、路径,然后是模糊信息。 我附上一个例子: 文件名:new 1.txt 文本原始文件:CIAO6 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
protected void onEventImpl(Event event)
{
...
String fileName = aaDocumentoMultimedia.getPercorso();
byte[] documento = aaDocumentoMultimedia.getDocumento();
Date docData = aaDocumentoMultimedia.getDataRegistrazione();
if (StringUtils.isNotBlank(fileName))
{
migrazioneDocumentiManager.writeFileOnDisk(fileName, documento, docData);
}
...
}
@Override
public void writeFileOnDisk(String fileName, byte[] documento, Date registrationData) throws SQLException, FileNotFoundException, IOException
{
ByteArrayInputStream input = null;
FileOutputStream output = null;
try
{
(new File(getPathFile(registrationData))).mkdirs();
input = new ByteArrayInputStream(documento);
output = new FileOutputStream(new File(getPathFile(registrationData) + fileName));
byte[] buffer = new byte[1024 * 4];
int n = 0;
while (-1 != (n = input.read(buffer)))
{
output.write(buffer, 0, n);
}
output.flush();
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
if (input != null)
{
input.close();
}
if (output != null)
{
output.close();
}
}
}
那么有两点:
- 您必须确保此代码在数据库会话中执行,否则将无法正确读取blob内容
- 虽然您刷新了输出流,但不关闭输入/输出流,这会很好
org.apache.commons.io.FileUtils
,这就是我用来将blob转换为文件的内容:
FileUtils.copyInputStreamToFile(inStream, blobFile);
使用这种方法,您不需要扩展、长度、大小和缓冲。感谢您的回复。我立即回答:*我有blob文件并导出工作。*我关闭了输入/输出,但我没有在此处编写此代码。*db上的blob是正确的。我用新代码尝试了它,但仍然存在错误。我甚至无法正确打开带有其他扩展名的文件,因为.xls、docxI插入了其他代码,可能问题是其他地方不确定,我没有看到您的代码中有任何错误,我可以确保我的代码正常工作。你们能比较一下用这段代码生成的文件和从数据库导出的同一个文件的大小吗?我在磁盘上做了一些读写文件的测试,结果成功了。我认为问题在于解码hibernate文件blob。我使用MicrosoftSQLServer。字段,其中是文件内容类型ImageConvert在您的情况下没有任何意义-您没有转换任何内容。完全您只需将字节写入文件。