これが私がやりたいことであり、実装に役立つ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")));
何かご意見は?
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をプロパティファイルに保存し、必要な場所にそれぞれを個別に挿入することもできます。多くのオプションがあります。
変化する 。パス区切りとして/を使用し、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
はsystemクラスローダーを使用しますが、これは望みのものではありません。
ドットの代わりにスラッシュを使用すると、ClassPathResource
でも機能すると思います。
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`
}