Программа не запускается из ожидаемого каталога? - PullRequest
0 голосов
/ 05 мая 2010

Я работаю над веб-программой, использующей Java. Я не уверен, как именно это сформулировать, но я ожидаю, что программа будет запущена из каталога c: / Resin / webapps / apps. Тем не менее, когда я ссылаюсь на файл в программе, например: «../files/randomfile.pdf», он не может найти этот файл. Это работает, когда я ссылаюсь на это так: "c: /Resin/webapps/files/randomfile.pdf". Как мне поменять "бегущую локацию"? (И какой технический термин для этого?)

try {
    Document iTextDoc = new Document(PageSize.LETTER, 27, 27, 35, 18);
    HttpServletResponse res = (HttpServletResponse) pageContext.getResponse();
    res.setContentType("application/vnd.ms-word");
    res.setHeader("Content-Disposition", "attachment; filename=" + fileName + ".rtf;");

    RtfWriter2 rtfWriter = RtfWriter2.getInstance(iTextDoc, res.getOutputStream());     
    iTextDoc.open();
    iTextDoc.add(new Paragraph ("Testing RTF Letterhead with Logo"));

    // Use full classname to avoid ambiguity with java.awt.Image
    com.lowagie.text.Image logoImg = com.lowagie.text.Image.getInstance("../files/someimage.jpg");
    logoImg.setAlignment(Image.RIGHT | Image.TEXTWRAP);
    iTextDoc.add(logoImg);
    iTextDoc.add(new Paragraph ("Put other information about organization beneath logo"));
    iTextDoc.close();
}

Я получаю следующую ошибку с полученным файлом: Adobe Reader не может открыть файл «someFile.pdf», так как он не поддерживает тип файла или поврежден (например, он был отправлен как вложение электронной почты) и не был правильно декодирован).

Однако, если я изменю команду getInstance на эту:

com.lowagie.text.Image logoImg = com.lowagie.text.Image.getInstance("webapps/files/someimage.jpg");

это работает. Поэтому я предполагаю, что рабочий каталог (спасибо за термин) должен быть где-то установлен. Я использую смолу - любая идея, где я должен установить это?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 05 мая 2010

Возможно, вы ссылаетесь на свойство user.dir system , доступное только для чтения Относительные пути используют это как корневую папку.

0 голосов
/ 05 мая 2010

Из java.io.File doc

По умолчанию классы в пакете java.io всегда разрешают относительные пути к текущему каталогу пользователя . Этот каталог называется системным свойством user.dir и обычно является каталогом, в котором была вызвана виртуальная машина Java.

Вообще говоря, вы не должны полагаться на текущий каталог для поиска файлов. Используйте полные (абсолютные) пути, если это возможно (но, конечно, без использования их в вашем приложении). если файл находится внутри дерева веб-приложения (или только внутри пути к классам), вы можете взглянуть на findResource () и связанные методы.

0 голосов
/ 05 мая 2010

В Java-программе вы не можете изменить местоположение бега.

Сначала вы должны узнать, где работает ваша программа. Вы можете сделать это, позвонив

System.out.println( new File( "." ).getAbsolutePath() );

Теперь вы можете указать ваши пути относительно этого каталога.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...