powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / FileOutputStream запись файла.
14 сообщений из 14, страница 1 из 1
FileOutputStream запись файла.
    #38984853
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему-то, когда запускаю из IDE, то файлы создаются и открываются (FileOutputStream)
Но когда проект собран, то после запуска .jar при выполнении метода создания файла, файл не создается.
В чем может быть загвоздка?
Подозреваю что запускать надо с какими-то правами, но при этом (в случае отдельного запуска .jar) создается файл, который использует ObjectOutputStream.

Грубо говоря и показывая мой недокод, без файнали и прочего..., то вот это работает:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
       try {
            Path p = Paths.get(System.getProperty("user.home"), "ph/settings/user.ser");
            File file = new File(p.toString());
            ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(file));
            out.writeObject(selectedUserForLogin);
            out.flush();
            out.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }



А вот это нет:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
 Path p = Paths.get(System.getProperty("user.home"), "ph/excel" + request.getNumber() + " от " + utils.formatDateYYYYMMDD(new Date()) + " " + System.currentTimeMillis() + ".xls");
            File file = new File(p.toString());
            try {
                file.getParentFile().mkdirs();
                file.createNewFile();
                file.setWritable(true);
                file.setReadable(true);
                file.setExecutable(true);
                fileOutputStream = new FileOutputStream(new File(p.toString()));
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                JRXlsExporter exporterXLS = new JRXlsExporter();
                exporterXLS.setParameter(JRXlsExporterParameter.JASPER_PRINT, jasperPrint);
                exporterXLS.setParameter(JRXlsExporterParameter.OUTPUT_STREAM, baos);
                exporterXLS.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, true);
                exporterXLS.setParameter(JRXlsExporterParameter.CHARACTER_ENCODING, "UTF-8");
                exporterXLS.exportReport();
                baos.toString("UTF-8");
                fileOutputStream.write(baos.toByteArray());
                fileOutputStream.flush();
                fileOutputStream.close();
                Desktop.getDesktop().open(file);
            } catch (IOException | JRException e) {
                System.out.println(e);
                 Logger.getLogger(ToXLS.class.getName()).log(Level.SEVERE, null, e);
            } finally {
                
            }
...
Рейтинг: 0 / 0
FileOutputStream запись файла.
    #38984857
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в создании пути пробовал по разному, обычно там стоит "ph/excel/", выше опечатка без слеша.
пробовал просто убирать и все-равно файл в домашней директории не создается при отдельном запуске.
...
Рейтинг: 0 / 0
FileOutputStream запись файла.
    #38984870
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня на столько нет слов, что аж боюсь перечислять
new File(path.toString()) !!! А-а-а... Мои глаза!

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
public class ToXLS {
    public void export(Request request,JasperPrint jasperPrint) {
        Path p = Paths.get(
                System.getProperty("user.home"), 
                SUBFOLDER_NAME, 
                fileNameForNumber(request.getNumber()));
        File file = p.toFile();
        file.getParentFile().mkdirs();
        
        try (OutputStream out = new BufferedOutputStream(new FileOutputStream(file){
            jasperExport(jasperPrint, out);
            Desktop.getDesktop().open(file);
        } catch (IOException| JRException e) {
            Logger.getLogger(getClass().getName()).log(Level.SEVERE, e.getMessage(), e);
        }    
    }

    private jasperExport(JasperPrint jasperPrint, OutputStream out) throws JRException{
        JRXlsExporter exporterXLS = new JRXlsExporter();
        exporterXLS.setParameter(JRXlsExporterParameter.JASPER_PRINT, jasperPrint);
        exporterXLS.setParameter(JRXlsExporterParameter.OUTPUT_STREAM, out);
        exporterXLS.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, true);
        exporterXLS.setParameter(JRXlsExporterParameter.CHARACTER_ENCODING, "UTF-8");
        exporterXLS.exportReport();
    }
    
    private String fileNameForNumber(String requestNumber) {
        return "excel" + requestNumber + " от " + utils.formatDateYYYYMMDD(new Date()) + " " + System.currentTimeMillis() + ".xls";
    }
}
...
Рейтинг: 0 / 0
FileOutputStream запись файла.
    #38984876
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nixicв создании пути пробовал по разному, обычно там стоит "ph/excel/", выше опечатка без слеша.
пробовал просто убирать и все-равно файл в домашней директории не создается при отдельном запуске.
Какие в очко слеши? Люди мучались, изобретали java.io.File, потом java.nio.file.Path, только что бы про слеши забыть на всегда. Но нет же.
...
Рейтинг: 0 / 0
FileOutputStream запись файла.
    #38984877
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

да отглажу я потом, поставлю просто по нормальному new FileOutputStream(file);
тестирую я все что возможно, по разному пишу, запускаю по разному, примеров куча в сети.
проблема все-равно не решается.
...
Рейтинг: 0 / 0
FileOutputStream запись файла.
    #38984881
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fileNameForNumber() в идеале надо на String.format() переписать.
...
Рейтинг: 0 / 0
FileOutputStream запись файла.
    #38984885
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nixicда отглажу я потом

Что тут ещё можно отлазить?

Nixic, поставлю просто по нормальному new FileOutputStream(file);
тестирую я все что возможно, по разному пишу, запускаю по разному, примеров куча в сети.
проблема все-равно не решается.
Конечно не решается, когда столько херни в коде, что аж глаза разбегаются. Запусти нормальный код и скажи в чем именно проблема с ним.
...
Рейтинг: 0 / 0
FileOutputStream запись файла.
    #38984891
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А без вот этого куска работает?

Код: java
1.
2.
3.
4.
5.
6.
JRXlsExporter exporterXLS = new JRXlsExporter();
                exporterXLS.setParameter(JRXlsExporterParameter.JASPER_PRINT, jasperPrint);
                exporterXLS.setParameter(JRXlsExporterParameter.OUTPUT_STREAM, baos);
                exporterXLS.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, true);
                exporterXLS.setParameter(JRXlsExporterParameter.CHARACTER_ENCODING, "UTF-8");
                exporterXLS.exportReport();



Что нибудь другое записать в файл с навороченным названием получается?
...
Рейтинг: 0 / 0
FileOutputStream запись файла.
    #38984894
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yelenaЧто нибудь другое записать в файл с навороченным названием получается?
Спасибо, yelena за подсказку. Думал как же имя файла может сломаться. И не придумал.
Только сейчас понял что если " от " слетит во время компиляции то имя файла легко выйдет не валидным.
...
Рейтинг: 0 / 0
FileOutputStream запись файла.
    #38984914
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, за поддержку :)
Переписал так.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
       try {
                Path p = Paths.get(System.getProperty("user.home"), SUBFOLDER_NAME, fileNameForNumber(request.getNumber().toString()));
                File file = p.toFile();
                file.getParentFile().mkdirs();
                OutputStream out = new BufferedOutputStream(new FileOutputStream(file));
//                jasperExport(jasperPrint, out);
                out.flush();
                out.close();
                Desktop.getDesktop().open(file);
            } catch (IOException e) {
                System.out.println(e);
                Logger.getLogger(getClass().getName()).log(Level.SEVERE, e.getMessage(), e);
            }



При запуске из IDE работает, открывает файл с данными внутри, если jasperExport(jasperPrint, out); не закомментирован.
И открывает пустой файл, если его закомментировать и эксель ругается на то, что действительный формат отличается от указанного в расширении. Но файл создается.

Если же скомпилировать и открывать отдельно jar - та же история, никакой реакции...
...
Рейтинг: 0 / 0
FileOutputStream запись файла.
    #38984915
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо где-то лог найти... хм.. это уже другой вопрос...
...
Рейтинг: 0 / 0
FileOutputStream запись файла.
    #38984923
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NixicНадо где-то лог найти... хм.. это уже другой вопрос...
А зачем было логировать в java.util, если пользовать им не умеешь?
e.printStackTrace() наше фсё.
...
Рейтинг: 0 / 0
FileOutputStream запись файла.
    #38984937
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все уже решил с логами, получил:
java.io.FileNotFoundException: src\nix\reports\jrxml\ReportRequestWithPrices.jasper

мда уж, кто бы мог подумать)) пути у меня к ним напрямую прописаны были.

ппц...
...
Рейтинг: 0 / 0
FileOutputStream запись файла.
    #38984938
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо большое всем за науку, стал сегодня малость умнее :)
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / FileOutputStream запись файла.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]