32

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

私のDAOレイヤーでは、SQLファイル(ファイルごとに1つのSQL)を外部化したいと考えています。おそらくSpringBeanシングルトンとしてSQLステートメントを読み取ってキャッシュしたいと思います。しかし、私の最初の苦労では、クラスパスにSQLファイルをロードするだけで問題が発生します...

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

これが私が求めているものの一種です..しかし、ファイルまたはおそらくクラスパスを認識させることができません... applicationContextで何かを定義する必要があるかどうかはわかりませんか?

ここに、うまくいかないように見えるいくつかの試みがあります...春っぽいものとちょうどjava'っぽいものの両方。

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")));

何かご意見は?

4

3 に答える 3

39

変化 。パス区切り文字として/に移動し、以下を使用します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。 必要なものではないシステムgetSystemResourceAsStreamクラスローダーを使用します。

ドットの代わりにスラッシュを使用することも有効だと思いClassPathResourceます。

于 2009-04-09T15:14:47.440 に答える
34

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をプロパティファイルに保存し、必要に応じてそれぞれを個別に挿入することもできます。たくさんのオプションがあります。

于 2009-04-09T15:17:50.853 に答える
0
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`

}
于 2015-07-15T15:49:45.253 に答える