Как создать временный файл без случайного числа

Мне нужно отправить файл 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();
}

Мне нужно имя файла "SupplierGuide.pdf".

Amit Jain 21.07.2018 09:48

Откуда у вас случайное число?

OneCricketeer 21.07.2018 09:52

Почему бы вам просто не взять желаемое имя файла? (temp = new File("whatever name you want");) Кстати. Интересный подход к форматированию кода.

Henry 21.07.2018 09:53

На самом деле первая проблема ... Я получаю java.io.FileNotFoundException на сервере во время локальной отладки, он работает нормально. У меня есть один файл PDF, который является частью самой банки. Этот PDF-файл будет отправлен по почте. Этот jar-файл будет запускаться на сервере заданием kjb.

Amit Jain 21.07.2018 11:57

Чтобы решить первую проблему, я создаю временный файл. теперь имя имеет случайное число.

Amit Jain 21.07.2018 12:01

вы должны спросить себя, зачем вам нужно создавать файл для начала? почему бы не записать непосредственно на InputStream вложения электронной почты и полностью пропустить дисковый ввод-вывод

user177800 21.07.2018 16:41
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
6
2 156
1

Ответы 1

Я пробовал это на веб-сервере 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
}

Другие вопросы по теме