2012-05-05 4 views
1

파일에서 한 줄씩 데이터베이스로 데이터를 추출하고 이미 데이터베이스에 읽은 행을 플래그하는 적절한 방법을 찾을 수 없습니다.파일에서 이전 줄의 오프셋 가져 오기

내가 가지고있는 I는 파일 행을 반복하는 데 사용하는 코드를 다음과 I 라인 내 플래그를 가지고
를 확인하려고 시도하거나 다른 내가 파일 라인

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

내 프로세스에 따라 DB에 줄을 읽었습니다. 파일에서이 줄을 읽거나 건너 뛸 수 있습니다. –

+0

그 경우 오프셋 *을 사용하기 전에 선을 읽으십시오. 이 오프셋을 사용하면 선의 시작 부분을 덮어 씁니다. (그냥 읽은 줄 다음의 문자가 아닌) –

1

@ 피터 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; 
} 
관련 문제