Java の nio ファイル ウォッチャーを使用してフォルダーを監視している Java プログラムがあります。そのフォルダーに何かが作成されると、そのファイルの名前が取得され、それを使用FileInputStream InputStreamReader
してコンテンツが文字列に設定されます。この文字列は、レポートを印刷するためのパラメーターとしてこの文字列を使用するクラスに渡されます。レポート サーバーが次のようなエラーを返しています。
プロトコルなし: java.io.InputStreamReader@dda25b?timezone=America/New_York&vgen=1377628109&cmd=get_pg&page=1&viewer=java2
Javaは文字列ではなく何らかのコマンドとしてそれを扱い、その内容を変更しているため、文字列の一部が気に入らないようです。簡単な解決策があると確信していますが、それをどのように表現すればよいかわかりません。文字列は次のようになります。
serverURL:port/?report=repo:reportname&datasource=datasource&prompt0=Date(2014,1,2)
コード:
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.file.*;
import static java.nio.file.StandardWatchEventKinds.*;
public class watching {
public static void main(String[] args) {
try {
String dirToWatch = "\\\\DIRECTORY\\PATH\\HERE\\";
WatchService watcher = FileSystems.getDefault().newWatchService();
Path logDir = Paths.get(dirToWatch);
logDir.register(watcher, ENTRY_CREATE);
while (true) {
WatchKey key = watcher.take();
for (WatchEvent<?> event : key.pollEvents()) {
WatchEvent.Kind<?> kind = event.kind();
if (kind == ENTRY_CREATE) {
WatchEvent<Path> ev = (WatchEvent<Path>) event;
Path filename = ev.context();
String thisfile = filename.toString();
//System.out.printf("%s was created in log dir.", filename.getFileName());
FileInputStream fis = new FileInputStream(dirToWatch+thisfile);
InputStreamReader in = new InputStreamReader(fis, "UTF-8");
String inetargs = in.toString();
inetprint printer = new inetprint (inetargs);
}
}
key.reset();
}
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
}