web-dev-qa-db-ja.com

クラスパスのファイルを読み取る

これが私がやりたいことであり、実装に役立つSpringクラスがあるかどうか疑問に思っています。この特定の問題にスプリングを使用する必要はありません。他のすべてにスプリングを実装するだけです。

私のDAOレイヤーでは、ファイルごとに1 sqlとも呼ばれるSQLファイルを外部化します。おそらく、春豆のシングルトンとしても、SQLステートメントを読み取ってキャッシュしたいと思います。しかし、私の最初の闘争では、クラスパスにSQLファイルをロードするだけで問題が発生しています...

それを助けるために春に何かありますか?私はドキュメントを見てきましたが、何も飛び出していません。

ここに私がやっていることのようなものがあります..しかし、ファイルまたはクラスパスを認識させることができません...何かがapplicationContextで定義される必要があるかどうか確かではありませんか?

うまくいかないように思えるいくつかの試みを以下に示します。

reader = new BufferedReader(new InputStreamReader(new ClassPathResource("com.company.app.dao.sql.SqlQueryFile.sql").getInputStream())

reader = new BufferedReader(new InputStreamReader(ClassLoader.getSystemResourceAsStream("com.company.app.dao.sql.SqlQueryFile.sql")));

何かご意見は?

31
Greg J

Springを依存性注入フレームワークとして使用していると仮定して、Springに注入させてみてください。

クラスで、次のようなことをします。

public void setSqlResource(Resource sqlResource) {
    this.sqlResource = sqlResource;
}

そして、アプリケーションコンテキストファイルのBean定義で、プロパティを設定するだけです。

<bean id="someBean" class="...">
    <property name="sqlResource" value="classpath:com/somecompany/sql/sql.txt" />
</bean>

また、Springは、クラスパスからファイルをロードし、リソースとしてBeanに提供するのに十分賢いはずです。

PropertyPlaceholderConfigurer を調べて、すべてのSQLをプロパティファイルに保存し、必要な場所にそれぞれを個別に挿入することもできます。多くのオプションがあります。

34
user7094

変化する 。パス区切りとして/を使用し、getResourceAsStreamを使用します。

_reader = new BufferedReader(new InputStreamReader(
    getClass().getClassLoader().getResourceAsStream(
        "com/company/app/dao/sql/SqlQueryFile.sql")));
_

または

_reader = new BufferedReader(new InputStreamReader(
    getClass().getResourceAsStream(
        "/com/company/app/dao/sql/SqlQueryFile.sql")));
_

Class.getResourceAsStream() vs _ClassLoader.getResourceAsStream_を使用する場合は、先頭のスラッシュに注意してください。 getSystemResourceAsStreamsystemクラスローダーを使用しますが、これは望みのものではありません。

ドットの代わりにスラッシュを使用すると、ClassPathResourceでも機能すると思います。

39
Jon Skeet
import Java.io.BufferedReader;
import Java.io.File;
import Java.io.FileNotFoundException;
import Java.io.FileReader;
import Java.io.IOException;

public class readFile {
    /**
     * feel free to make any modification I have have been here so I feel you
     * 
     * @param args
     * @throws InterruptedException
     */
    public static void main(String[] args) throws InterruptedException {
        File dir = new File(".");// read file from same directory as source //
        if (dir.isDirectory()) {
            File[] files = dir.listFiles();
            for (File file : files) {
                // if you wanna read file name with txt files
                if (file.getName().contains("txt")) {
                    System.out.println(file.getName());
                }

                // if you want to open text file and read each line then
                if (file.getName().contains("txt")) {
                    try {
                        // FileReader reads text files in the default encoding.
                        FileReader fileReader = new FileReader(
                                file.getAbsolutePath());
                        // Always wrap FileReader in BufferedReader.
                        BufferedReader bufferedReader = new BufferedReader(
                                fileReader);
                        String line;
                        // get file details and get info you need.
                        while ((line = bufferedReader.readLine()) != null) {
                            System.out.println(line);
                            // here you can say...
                            // System.out.println(line.substring(0, 10)); this
                            // prints from 0 to 10 indext
                        }
                    } catch (FileNotFoundException ex) {
                        System.out.println("Unable to open file '"
                                + file.getName() + "'");
                    } catch (IOException ex) {
                        System.out.println("Error reading file '"
                                + file.getName() + "'");
                        // Or we could just do this:
                        ex.printStackTrace();
                    }
                }
            }
        }

    }`enter code here`

}
0
Helper