Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / FileOutputStream запись файла. / 14 сообщений из 14, страница 1 из 1
16.06.2015, 14:32
    #38984853
Nixic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FileOutputStream запись файла.
Почему-то, когда запускаю из 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
16.06.2015, 14:34
    #38984857
Nixic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FileOutputStream запись файла.
в создании пути пробовал по разному, обычно там стоит "ph/excel/", выше опечатка без слеша.
пробовал просто убирать и все-равно файл в домашней директории не создается при отдельном запуске.
...
Рейтинг: 0 / 0
16.06.2015, 14:48
    #38984870
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FileOutputStream запись файла.
У меня на столько нет слов, что аж боюсь перечислять
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
16.06.2015, 14:50
    #38984876
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FileOutputStream запись файла.
Nixicв создании пути пробовал по разному, обычно там стоит "ph/excel/", выше опечатка без слеша.
пробовал просто убирать и все-равно файл в домашней директории не создается при отдельном запуске.
Какие в очко слеши? Люди мучались, изобретали java.io.File, потом java.nio.file.Path, только что бы про слеши забыть на всегда. Но нет же.
...
Рейтинг: 0 / 0
16.06.2015, 14:50
    #38984877
Nixic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FileOutputStream запись файла.
Blazkowicz,

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

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

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

Код: 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
16.06.2015, 15:02
    #38984894
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FileOutputStream запись файла.
yelenaЧто нибудь другое записать в файл с навороченным названием получается?
Спасибо, yelena за подсказку. Думал как же имя файла может сломаться. И не придумал.
Только сейчас понял что если " от " слетит во время компиляции то имя файла легко выйдет не валидным.
...
Рейтинг: 0 / 0
16.06.2015, 15:23
    #38984914
Nixic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FileOutputStream запись файла.
Спасибо, за поддержку :)
Переписал так.

Код: 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
16.06.2015, 15:24
    #38984915
Nixic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FileOutputStream запись файла.
Надо где-то лог найти... хм.. это уже другой вопрос...
...
Рейтинг: 0 / 0
16.06.2015, 15:29
    #38984923
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FileOutputStream запись файла.
NixicНадо где-то лог найти... хм.. это уже другой вопрос...
А зачем было логировать в java.util, если пользовать им не умеешь?
e.printStackTrace() наше фсё.
...
Рейтинг: 0 / 0
16.06.2015, 15:37
    #38984937
Nixic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FileOutputStream запись файла.
Все уже решил с логами, получил:
java.io.FileNotFoundException: src\nix\reports\jrxml\ReportRequestWithPrices.jasper

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

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


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