1

我正在将文件中的数据逐行提取到数据库中,但我无法找到正确的方法来标记已读入数据库的行。

我有以下代码用于遍历文件行,并尝试验证
该行是否具有我的标志,否则我尝试将标志附加到文件行

List<String> fileLines = new ArrayList<String>();
File logFile = new File("C:\\MyStuff\\SyslogCatchAllCopy.txt");
try {
  RandomAccessFile raf = new RandomAccessFile(logFile, "rw");
  String line = "";
  String doneReadingFlag = "##";
  Scanner fileScanner = new Scanner(logFile);
  while ((line = raf.readLine()) != null && !line.contains(doneReading)) {
    Scanner s = new Scanner(line);
    String temp = "";
    if (!s.hasNext(doneReadingFlag)) {
      fileLines.add(line);
      raf.write(doneReadingFlag.getBytes(), (int) raf.getFilePointer(),
          doneReadingFlag.getBytes().length);
    } else {
      System.err.println("Allready Red");
    }
  }
} catch (FileNotFoundException e) {
  System.out.println("File not found" + e);
} catch (IOException e) {
  System.out.println("Exception while reading the file ");
}
// return fileLines;
// MoreProccessing(fileLines);

此代码将标志附加到下一行并覆盖该位置的字符任何帮助?

4

2 回答 2

1

@Peter Lawrey我按照你说的做了,它对我有用:

如下:

ArrayList<String> fileLines=new ArrayList<String>();
File logFile=new File("C:\\MyStuff\\MyFile.txt");

RandomAccessFile raf = new RandomAccessFile(logFile, "rw");
String line="";
String doneReadingFlag="#";
long oldOffset=raf.getFilePointer();
long newOffset=oldOffset;

while ((line=raf.readLine())!=null)
{
     newOffset=raf.getFilePointer();    

     if(!line.contains(doneReadingFlag))
     {
           fileLines.add(line);
           raf.seek((long)oldOffset);
           raf.writeChars(doneReadingFlag);
           raf.seek(newOffset);
           System.out.println("Line added and flaged");
     }
     else
     {
           System.err.println("Already Red");
     }
     oldOffset=newOffset;
}
于 2012-05-06T08:01:21.043 回答
1

当您写入文件时,它不会插入您是否应该期望它替换字符。

您需要在文件中为要更改的信息保留空间,或者您可以将信息添加到另一个文件中。

或者,您可以将已阅读的行号(或更好的字符位置)存储在某处,而不是标记每个文件。

如果您没有重新启动进程,则可以让进程读取附加的文件(这意味着您可能不需要存储您所在的任何地方)

于 2012-05-05T07:50:39.223 回答