2012-05-05 21 views
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); 

該代碼將標誌附加到下一行,並覆蓋該位置的字符 任何幫助?

回答

1

當你寫入文件時,它不會插入你是否應該期望它替換字符。

您需要爲文件中的空間保留要更改的信息,或者您可以將信息添加到另一個文件。或者不是標記每個文件,而是可以在某處存儲已讀取的行號(或更好的字符位置)。

如果不重新啓動過程中,你可以有進程讀取該文件,因爲它被附加(這意味着你可能不需要存儲你在哪裏最多的任何地方)

+0

我沒有問題,更換字符,問題是替換的字符是下一行也不行我讀當前迭代的while循環 我所需要的根據我的過程,當我讀取到數據庫中的行時,我可以從文件中刪除它或跳過讀取它,以獲得我在循環 –

+0

內讀取的行的偏移​​量 –

+0

在這種情況下,在*之前取下偏移量*閱讀該行。如果使用此偏移量,則將覆蓋該行的開頭。 (而不是剛剛閱讀的行之後的字符) –

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; 
} 
相關問題