我在LONG类型列中存储了Files @ Oracle DB。 现在我需要在不制作相同文件的情况下打开它。怎么做?
在Eclipse工作区制作文件的示例代码。如何调整它不在文件系统中制作文件?
谢谢你的回答!正确的答案保证!
session.doWork(new Work() {
public void execute(Connection connection) throws SQLException {
String sql = (" SELECT failas,aprasymas,ispletimas FROM ZALA.claims_additional_doc_v where id = ? ");
PreparedStatement stmt = null;
ResultSet rs = null;
try {
stmt = connection.prepareStatement(sql);
stmt.setLong(1, papId);
rs = stmt.executeQuery();
if (rs.next()) {
byte[] bytes = rs.getBytes(1);
String fileName = rs.getString(2);
// String fileType = rs.getString(3);
FileOutputStream fileO = null;
String userHomeFolder = System.getProperty("user.home") + "\\Downloads";
try {
fileO = new FileOutputStream(userHomeFolder + "\\" + fileName);
fileO.write(bytes);
fileO.close();
File file = new File(userHomeFolder + "\\" + fileName);
if (Desktop.isDesktopSupported()) {
try {
if (file.toString().endsWith(".pdf"))
Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + file);
else {
Desktop desktop = Desktop.getDesktop();
desktop.open(file);
}
} catch (IOException ex) {
log.debug("err @ runtime" + ex.getMessage());
}
}
} catch (Exception e) {
String err = e.toString();
log.debug("err @ stream" + err);
} finally {
if (fileO != null) {
fileO.close();
}
}
}
} catch (Exception e) {
e.printStackTrace();
new DisnetErrorHandler().handleError(e);
}
SaveUtility.closeRsAndStmt(rs, stmt);
}
});
答案 0 :(得分:1)
您已将数据读入字节数组(bytes
)。由于我假设您需要InputStream
,因此您可以使用ByteArrayInputStream。
InputStream inputStream = new ByteArrayInputStream(bytes);
大多数图书馆支持从InputStream
读取,而不仅仅是从文件中读取。
如果您要使用其他程序打开文件:
您不知道,他们是否支持通过文件系统之外的其他方式接收数据。然而,这意味着您必须创建类似虚拟文件的东西,即使在Java程序终止后也可能必须工作。
在this one等其他问题中已经讨论过创建虚拟文件/驱动器。然而,真正使用虚拟驱动器似乎是一个彻底的过度杀伤。