获取文件中上一行的偏移量

时间:2012-05-05 07:41:16

标签: java file

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

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分: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;
}