Мне нужно отправить файл pdf в виде вложения по почте. Это задание планировщика, которое запускается каждые 2 часа. Непосредственно это не требует исключения File Not Found Exception, поэтому я подумал, что помещаю в каталог temp и отправляю оттуда. Это задание выполняется на сервере JBoss.
File temp = null;
String tDir = System.getProperty("java.io.tmpdir") + "SupplierGuide";try
{
temp = File.createTempFile(tDir, ".pdf");
final InputStream inputStream = SendNotificationToContacts.class.getClassLoader()
.getResourceAsStream(result.getProperty("supplier.guide"));
IOUtils.copy(inputStream, new FileOutputStream(temp));
}catch(
Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
Откуда у вас случайное число?
Почему бы вам просто не взять желаемое имя файла? (temp = new File("whatever name you want");) Кстати. Интересный подход к форматированию кода.
На самом деле первая проблема ... Я получаю java.io.FileNotFoundException на сервере во время локальной отладки, он работает нормально. У меня есть один файл PDF, который является частью самой банки. Этот PDF-файл будет отправлен по почте. Этот jar-файл будет запускаться на сервере заданием kjb.
Чтобы решить первую проблему, я создаю временный файл. теперь имя имеет случайное число.
вы должны спросить себя, зачем вам нужно создавать файл для начала? почему бы не записать непосредственно на InputStream вложения электронной почты и полностью пропустить дисковый ввод-вывод




Я пробовал это на веб-сервере Apache Tomcat 7.0.65 с сервлета. Эта процедура также использует Java 7 и утилиты ввода-вывода Apache Commons (commons-io-1.3.2.jar).
private void createUserGuideInTempFolder()
throws IOException {
String inputFileName = "N:\\TestData\\user-guide.pdf";
String baseName = FilenameUtils.getBaseName(inputFileName);
String extension = FilenameUtils.getExtension(inputFileName);
Path tempFilePath = Files.createTempFile(baseName, extension);
Path inputFilePath = Paths.get(inputFileName);
InputStream inStream = Files.newInputStream(inputFilePath);
byte [] fileBytes = IOUtils.toByteArray(inStream);
tempFilePath = Files.write(tempFilePath, fileBytes);
System.out.println(inputFilePath);
// Prints input file: N:\TestData\user-guide.pdf
System.out.println(tempFilePath);
// Prints temp file: N:\apache-tomcat-7.0.65\temp\user-guide3642635958536288074pdf
Path newTempFilePath = Paths.get(tempFilePath.getParent().toString(),
inputFilePath.getFileName().toString());
newTempFilePath = Files.move(tempFilePath, newTempFilePath);
System.out.println(newTempFilePath);
// Prints result file in temp: N:\apache-tomcat-7.0.65\temp\user-guide.pdf
}
Мне нужно имя файла "SupplierGuide.pdf".