0

DBのblobフィールドからPDFを作成したいと思います。ファイルの場所を指定しなくても問題なく動作します。PDFが生成されて読み取り可能です。しかし、ファイルの場所を指定すると、が表示されますnullpointerexception

ファイルの場所はプロパティファイルにあります。

/**
 * Deze methode zoekt een pdf in de database op pdfnaam
 * 
 * @param name, de naam van de pdf
 * @return maakt de pdf aan
 */
public void retrievePdf(int iddocument) {
    Properties prop = new Properties();
    String fileLocation = new String("");
    FileOutputStream fos = null;

    try {
        // load a properties file
        prop.load(new FileInputStream("props/config.properties"));

        // get the property value and use it
        fileLocation = prop.getProperty("FileLocation");

        // verwijderen
        System.out.println(fileLocation);

    } catch (IOException ex) {
        ex.printStackTrace();
    }

    try {
        c = MySqlDAOFactory.getInstance().getConnection();

        String sql = "select * from pdf where iddocument=?";
        prest = c.prepareStatement( sql );
        prest.setInt(1, iddocument);
        rs = prest.executeQuery();

        while (rs.next()) { 
            // create file with the filename from 
            // the db in the dir fileLocation
            File file = new File(fileLocation, rs.getString( "pdfname" ) );
            //get the blob from the db
            Blob blob = rs.getBlob( "pdffile" );
            InputStream is = blob.getBinaryStream();   
            try {
                fos = new FileOutputStream(file);
            } catch (FileNotFoundException e) {
                // ...
            }  
            byte [] buffer = new byte[(int)blob.length()];
            int length = -1;
            try {
                while( ( length = is.read( buffer ) ) != -1 ) {
                    try {
                        fos.write(buffer, 0, length);
                    } catch (IOException e) {
                        // ...
                    }
                    try {
                        fos.flush();
                        fos.close();
                    } catch (IOException e) {
                        // ...
                    }
                }
            } catch (IOException e) {
                // ...
            }

            return;
        }
    } catch (SQLException e) {
        // ...
    } finally {
        MySqlConnectionFactory.getInstance().closeResultSet(rs);
        MySqlConnectionFactory.getInstance().closeStatement(prest);
        MySqlConnectionFactory.getInstance().closeConnection(c);
    }
}

プロパティファイルには次のように記述されています。FileLocation=reports

なぜそれが機能しないのか誰かが提案できますか?

4

1 に答える 1

1

解決しました:

私はdirでファイルの作成を変更しました、そしてそれはトリックをします:

File file = new File(fileLocation + File.separator + rs.getString("pdfname"));
                    file.getParentFile().mkdirs(); 
于 2012-05-19T11:16:45.360 に答える