如何在不制作文件的情况下打开文件(图像,pdf,utc ...)

时间:2014-06-04 15:54:06

标签: java file file-upload file-io

我在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);
        }
    });

1 个答案:

答案 0 :(得分:1)

您已将数据读入字节数组(bytes)。由于我假设您需要InputStream,因此您可以使用ByteArrayInputStream

InputStream inputStream = new ByteArrayInputStream(bytes);

大多数图书馆支持从InputStream读取,而不仅仅是从文件中读取。

如果您要使用其他程序打开文件:

您不知道,他们是否支持通过文件系统之外的其他方式接收数据。然而,这意味着您必须创建类似虚拟文件的东西,即使在Java程序终止后也可能必须工作。

this one等其他问题中已经讨论过创建虚拟文件/驱动器。然而,真正使用虚拟驱动器似乎是一个彻底的过度杀伤。