在Java中打开文件时出错

时间:2018-06-26 19:28:45

标签: java

我已经使用Java开发了一个系统。我可以保存pdf,doc文件等,它们保存在jTable中。我想通过单击Jtable行来打开这些文件。如果我尝试打开本地磁盘中的已保存文件,它们将无法打开。但是我可以打开可移动磁盘上的文件。请帮我解决这个问题。

这是我的代码:

 int row = jTable1.getSelectedRow();


        try {
        String value = (jTable1.getModel().getValueAt(row, 2).toString());

            //  Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler" + value);
            Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + value);


        } catch (Exception e) {
            e.printStackTrace();

        }

打开文件并获取目录路径:

try {

    JFileChooser chooser = new JFileChooser();

    chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
    chooser.showOpenDialog(null);
    File selectedPfile = chooser.getSelectedFile();
    jTextField1.setText(selectedPfile.getAbsolutePath());


} catch (Exception e) {
    e.printStackTrace();
}

保存代码:

try {

            Connection con = DB.connect();

            PreparedStatement p = con.prepareStatement("insert into documents values( '" + jTextField3.getText() + "','" + jTextField2.getText() + "', '" + jTextField1.getText() + "')");

            p.executeUpdate();
            p.close();

            JOptionPane.showMessageDialog(null, "save success");


        } catch (Exception e) {
            e.printStackTrace();

        }

保存在数据库中的路径 enter image description here

1 个答案:

答案 0 :(得分:1)

反斜杠在保存到数据库时会从路径中丢失,因为字符串直接插入到PreparedStatement中,而不是被设置为参数。改为这样做:

try (Connection con = DB.connect()) {
    try (PreparedStatement p = con.prepareStatement(
            "insert into documents values (?, ?, ?)")) {
        p.setString(1, jTextField3.getText());
        p.setString(2, jTextField2.getText());
        p.setString(3, jTextField1.getText());
        p.executeUpdate();
    }
} catch (SQLException e) {
    // handle exception...
}