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
なぜそれが機能しないのか誰かが提案できますか?