Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Прочитать файл


Автор: Samotnik 13.9.2011, 21:41
Привет.
Как из класса, который упакованный в jar прочитать файл, который упакованный в war ? smile  В свою очередь jar лежит в war
Способы:
Код

InputStream in = this.getClass().getClassLoader().getResourceAsStream("file.txt");
InputStream in = this.getClass().getResourceAsStream("/file.txt");

не работают. Точнее in == null
Иерархия:
project.war
    |    
    ---- папка с файлом
    |
    ------Web-Inf
            |
            -----lib
                   |
                    ----- тут jar в котором класс, который хочет прочитать файл smile

Автор: Farmazon 13.9.2011, 22:08
http://stackoverflow.com/questions/2395737/java-relative-path-of-a-file-in-a-java-web-application

ну или в classes свой файл просто затолкай...

Автор: dobrolub 13.9.2011, 22:51
Код

Thread.currentThread().getContextClassLoader().getResourceAsStream("file.txt);

Автор: Samotnik 14.9.2011, 10:01
dobrolub, всё равно null 

Автор: LSD 14.9.2011, 10:26
Цитата(Samotnik @  13.9.2011,  22:41 Найти цитируемый пост)
project.war
    |    
    ---- папка с файлом

Папка с файлом не находится в classpath, так что никакие  Class.getResourceAsStream() не помогут. Используй ServletContext.getResource().

Автор: dobrolub 14.9.2011, 18:52
hm... невнимательно прочитал ТЗ :( 
ЛСД прав.

Автор: dobrolub 14.9.2011, 19:11
Но есть хак:


Код

package qa;

import java.io.*;
import java.net.*;
import java.security.*;

public class FileReader {
    public static String readFile(String res) throws IOException {
        CodeSource codeSource = FileReader.class.getProtectionDomain().getCodeSource();
        URL codeLocation = codeSource.getLocation();
        String location = codeLocation.toString();
        location = location.substring(0, location.indexOf("WEB-INF"));


        InputStream in = new URL(location + '/' + res).openStream();
        StringBuilder builder = new StringBuilder();
        int i ;
        while ((i = in.read()) != -1)
            builder.append((char)i);

        return builder.toString();
    }
}


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)