使い方を教えてくださいJavaファイルから読み取ることに積極的に書き込まれている。

StackOverflow https://stackoverflow.com/questions/4149

  •  08-06-2019
  •  | 
  •  

質問

私は他のアプリケーションに対する書き込み情報をファイルです。これらの情報は、使用後の実行を決定パス/不正のものに限ります。持ってき方など、さすがだなと私できるファイルの読み込みと書き込まれているようであることをpass/不正しさのチェック。

を想定して行うことが可能ですが、どのようにgotchaの場合に、関連するJavaを利用して?場合、漁獲量読み、書面まで待つばかり書き込みまでのファイルを閉じ、または、読み込み例外をスローですが?場合には、後者の場合は、願い申し上げましょうか?

私の直感は、現在を経験させていただいてできた方BufferedStreams.この方法でいいのだろうか?

役に立ちましたか?

解決

が得られない例を用いて作業 FileChannel.read(ByteBuffer) していないのでブロックを読み込みます。ただくためには、下のコード:

boolean running = true;
BufferedInputStream reader = new BufferedInputStream(new FileInputStream( "out.txt" ) );

public void run() {
    while( running ) {
        if( reader.available() > 0 ) {
            System.out.print( (char)reader.read() );
        }
        else {
            try {
                sleep( 500 );
            }
            catch( InterruptedException ex ) {
                running = false;
            }
        }
    }
}

もちろん同じことをやろうとしてタイマーの代わりにスレッドが出るまでのプログラマを交換してください。まだ見方が、この作品は私にとってます。

ああ、そもそもの私の回答の点に注意す:を使用してい1.4.2.そのきっかけをつくっていきた知っている石の年齢ます。

他のヒント

したい場合に読み込むファイルが再び現れるのを確認後、書いたり読んだの新しいコンテンツを下すためのお手伝いをするために同じです。

この人はこのプログラムの運営にまで開いてからのコマンドプロンプト/ターミナルウィンドウには、ファイルの名前を読み込みます。でファイルの読み込みがないと死んでしまうようです。

java FileReader c:\myfile.txt

きタイプa行のテキスト保存でメモ帳が見えますので、テキスト印刷します。

public class FileReader {

    public static void main(String args[]) throws Exception {
        if(args.length>0){
            File file = new File(args[0]);
            System.out.println(file.getAbsolutePath());
            if(file.exists() && file.canRead()){
                long fileLength = file.length();
                readFile(file,0L);
                while(true){

                    if(fileLength<file.length()){
                        readFile(file,fileLength);
                        fileLength=file.length();
                    }
                }
            }
        }else{
            System.out.println("no file to read");
        }
    }

    public static void readFile(File file,Long fileLength) throws IOException {
        String line = null;

        BufferedReader in = new BufferedReader(new java.io.FileReader(file));
        in.skip(fileLength);
        while((line = in.readLine()) != null)
        {
            System.out.println(line);
        }
        in.close();
    }
}

おもしくはjavaチャンネル固定用のファイルです。

http://java.sun.com/javase/6/docs/api/java/nio/channels/FileChannel.html

この機能の FileChannel が開始

lock(long position, long size, boolean shared) 

このメソッドを呼び出しまでブロックの領域をロックすることができ

いては全く同感 ジョシュアの対応, Tailer に仕事のことです。以下に例を示します。

でに書き込み線毎150msファイルを読みながらこのまさに同じファイル毎2500ms

public class TailerTest
{
    public static void main(String[] args)
    {
        File f = new File("/tmp/test.txt");
        MyListener listener = new MyListener();
        Tailer.create(f, listener, 2500);

        try
        {
            FileOutputStream fos = new FileOutputStream(f);
            int i = 0;
            while (i < 200)
            {
                fos.write(("test" + ++i + "\n").getBytes());
                Thread.sleep(150);
            }
            fos.close();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }

    private static class MyListener extends TailerListenerAdapter
    {
        @Override
        public void handle(String line)
        {
            System.out.println(line);
        }
    }
}

その答えは"no"...を"yes"にする。ができるようにな実がわからない場合はファイルが開きるよう願います。なので、読書などからファイルまでの進展までのコンテンツが消耗している。ったマイクのアドバイスを書いたテストコード:

Writer.java 書き込み文字列をファイルで待機し、ユーザーにenterキーを押すと書き込みを別ファイルです。のマーケティングが"デザインにできることが起動されている必要があり、そのリーダーでき開始していませんのでご注意くださ対応の"部分"ファイルです。のリーダーに書いてあるReader.java.

Writer.java

public class Writer extends Object
{
    Writer () {

    }

    public static String[] strings = 
        {
            "Hello World", 
            "Goodbye World"
        };

    public static void main(String[] args) 
        throws java.io.IOException {

        java.io.PrintWriter pw =
            new java.io.PrintWriter(new java.io.FileOutputStream("out.txt"), true);

        for(String s : strings) {
            pw.println(s);
            System.in.read();
        }

        pw.close();
    }
}

Reader.java

public class Reader extends Object
{
    Reader () {

    }

    public static void main(String[] args) 
        throws Exception {

        java.io.FileInputStream in = new java.io.FileInputStream("out.txt");

        java.nio.channels.FileChannel fc = in.getChannel();
        java.nio.ByteBuffer bb = java.nio.ByteBuffer.allocate(10);

        while(fc.read(bb) >= 0) {
            bb.flip();
            while(bb.hasRemaining()) {
                System.out.println((char)bb.get());
            }
            bb.clear();
        }

        System.exit(0);
    }
}

なることを保証する。

このオプションがマイクを定期的にチェックがある場合は新しいデータから読み取られるファイルです。これらのユーザーの介入が必要であり、ファイルのリーダーと判断した場合には、読書が完成します。または、リーダーする必要があるので注意のことを知ファイルの内容をできることを決定し、末を書きます。該当するコンテンツがXMLの文書で使用できる信号です。

なJava枚が合問題が書いたものをファイルになっていない実際に書ききれないのですが、キャッシュのどこかで読んでから、同じファイルあたり実際にお渡しいたします。

ショートバージョン用フラッシュ()その他関連するシステムコールをお客様に関するデータが実際に書き込まれのファイルです。

注というわけではありませんのOSレベルのディスクキャッシュ-た場合のデータがここに現れる必要があると、read()このイベント.っているのかもしれませんの言語そのもののキャッシュに書き込みを待つまでのバッファが一杯またはファイルをフラッシュされます。

がオープンソースのJavaのグラフィックテールことがあるでしょうか。

https://stackoverflow.com/a/559146/1255493

public void run() {
    try {
        while (_running) {
            Thread.sleep(_updateInterval);
            long len = _file.length();
            if (len < _filePointer) {
                // Log must have been jibbled or deleted.
                this.appendMessage("Log file was reset. Restarting logging from start of file.");
                _filePointer = len;
            }
            else if (len > _filePointer) {
                // File must have had something added to it!
                RandomAccessFile raf = new RandomAccessFile(_file, "r");
                raf.seek(_filePointer);
                String line = null;
                while ((line = raf.readLine()) != null) {
                    this.appendLine(line);
                }
                _filePointer = raf.getFilePointer();
                raf.close();
            }
        }
    }
    catch (Exception e) {
        this.appendMessage("Fatal error reading log file, log tailing has stopped.");
    }
    // dispose();
}

かでは絶対手に入らないでございますのでご注意下さい書けテストケースを見た場合、ストリームから後のヒットに終わりまで、ずばりに書き込まれたデータファイルです。

理由がありますを使用することはできませんパイプによる入力/出力ストリーム?のデータが読み書きからの同一アプリケーション(その場合、データ、なぜ必要なファイルから読み込)?

その他のいか読み終わりまでのファイル、そのモニターの変化をどうぞ宜しくお願いします、続け...が出場レースの条件です。

ま読むことができないファイルを開から別のプロセスを用いFileInputStream,FileReaderまたはRandomAccessFile.

ただし、FileChannel直接作:

private static byte[] readSharedFile(File file) throws IOException {
    byte buffer[] = new byte[(int) file.length()];
    final FileChannel fc = FileChannel.open(file.toPath(), EnumSet.of(StandardOpenOption.READ));
    final ByteBuffer dst = ByteBuffer.wrap(buffer);
    fc.read(dst);
    fc.close();
    return buffer;
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top