2015-01-10 2 views
1

그래서 파일에서 데이터 행을 삭제하려고합니다. 새 파일을 열고 원하는 데이터와 일치하지 않는 모든 정보를 작성하여 성공적으로 완료했습니다. 풀다. 문제는 필자가 원래 파일을 삭제 한 다음 원래 파일과 동일한 이름으로 삭제하려는 정보를 제외하고 새 파일의 이름을 바꾸고 싶습니다. 이 작업을 수행하기 위해 코드를 추가했지만 어떤 이유로 작동하지 않습니다. 이 라인은 내 원래 파일 (입력 _)를 삭제 한 다음에 나의 새로운 파일 (임시 파일)의 이름을 의미하는파일 삭제 및 이름 바꾸기

inputFile.delete(); 

tempFile.renameTo(inputFile); 

: 당신은 하단에 볼 수있는

public static void delete() throws IOException 
{ 
    File inputFile = new File("Elements.txt"); 
    File tempFile = new File("myTempFile.txt"); 

    BufferedReader reader = new BufferedReader(new FileReader(inputFile)); 
    BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile)); 

    String element = JOptionPane.showInputDialog(null, "Enter the name of the Element you wish to delete.", "Remove an Element.", JOptionPane.INFORMATION_MESSAGE);; 
    String currentLine; 

    while((currentLine = reader.readLine()) != null) { 
     String trimmedLine = currentLine.trim(); 
     if(trimmedLine.startsWith(element)) continue; 
     writer.write(currentLine + System.getProperty("line.separator")); 
    } 
    writer.close(); 
    reader.close(); 

    inputFile.delete(); 
    tempFile.renameTo(inputFile); 

    JOptionPane.showMessageDialog(null, "Data has been removed from the file: Elements.txt"); 
} 

, 나는이 라인을 가지고 원래 파일에 있던 파일 이름. 그러나 코드를 실행 한 후에는 "myTempFile.txt"라는 파일을 가져 와서 원하는 데이터 행을 성공적으로 삭제했지만 원래 파일은 여전히 ​​존재하지만 삭제되지 않았고 새 파일의 이름도 변경되지 않았습니다. 원본 파일.

왜 이런 일이 발생하는지 알고 싶습니다.

+2

IO 예외를 어디에서 확인 하시겠습니까? 아니면 단순히 삭제 하시겠습니까? 내 생각 엔 그 삭제가 실패하고 예외를 던지고있다. – Alan

답변

0

그런 경우에 나는 문서를 읽고 어쩌면 조금 씩 인터넷 검색을 시작할 것입니다. 그러나 나는 너에게 대답을 줄 것이다!

inputFile.delete();

파일이 텍스트 편집기에서 열리는 경우와 같이 잘못 될 수 있습니다. 다행히도 delete()이 부울을 반환합니다. 확인해보세요!

또한 Niels가 정확하게 File.renameTo()을 언급 한 것처럼 Java 7에 액세스 할 수있는 경우에는 매우 희박합니다. files.nio 대체품을 사용하십시오. http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html

3

Use the java.nio.file API : 자바 7에서는 자바 7 파일에 대한 Files.move(Path source, Path target, CopyOption... options)

문서 도구를 사용할 수 있습니다. 이것은 2015입니다.

final Path src = Paths.get("Elements.txt").toAbsolutePath(); 
final Path tmp = src.resolveSibling("Elements.txt.new"); 

try (
    final BufferedReader reader = Files.newBufferedReader(src, StandardCharsets.UTF_8); 
    final BufferedWriter writer = Files.newBufferedWriter(tmp, StandardCharsets.UTF_8, 
     StandardOpenOption.CREATE_NEW); 
) { 
    // yadda yadda 
} 

Files.move(tmp, src, StandardCopyOption.REPLACE_EXISTING); 

File is unreliable. 늘 그렇습니다.

+0

그것은'java.nio.file.Path'입니다. 당신은 Java 7+를 사용하고 있습니다. – fge

+0

리더와 라이터를 열 때 '잡으려 고'하지 말고, Java 7 이상을 갖고 있고 가져올 클래스를 찾았습니다. –

+0

사용중인 _exact 구문을 정말로 복사 하시겠습니까? 이것은'괄호 쌍이 아니라'try' 바로 뒤의 _parentheses_ 쌍입니다! – fge

0

하지만 코드가 올바르게 작동합니다. 파일 경로 만 변경하고 파일이 편집기에서 열리지 않았는지 확인합니다.

public class NewClass { 

public static void main(String[] args) { 
    try { 
     delete(); 
    } catch (IOException ex) { 
     Logger.getLogger(NewClass.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

public static void delete() throws IOException { 
    File inputFile = new File("C:\\Users\\olyjosh\\Desktop\\Elements.txt"); 
    File tempFile = new File("C:\\Users\\olyjosh\\Desktop\\myTempFile.txt"); 

    BufferedReader reader = new BufferedReader(new FileReader(inputFile)); 
    BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile)); 

    String element = JOptionPane.showInputDialog(null, "Enter the name of the Element you wish to delete.", "Remove an Element.", JOptionPane.INFORMATION_MESSAGE);; 
    String currentLine; 

    while ((currentLine = reader.readLine()) != null) { 
     String trimmedLine = currentLine.trim(); 
     if (trimmedLine.startsWith(element)) { 
      continue; 
     } 
     writer.write(currentLine + System.getProperty("line.separator")); 
    } 
    writer.close(); 
    reader.close(); 

    inputFile.delete(); 
    tempFile.renameTo(inputFile); 

    JOptionPane.showMessageDialog(null, "Data has been removed from the file: Elements.txt"); 
} 

} 
+0

안녕하세요, 경로를 변경하면 정확히 무엇을 의미합니까? 내 프로 시저의 시작 부분에 시도 및 게시 진술을 넣어 귀하의 제안을 시도하고 기호를 찾을 수 없다는 메시지가 나타납니다 - 클래스 NewClass –

+0

경로는 어디에 그 파일 - 내 자신의 경우에 그것은 내 바탕 화면에 디렉토리 . "NewClass"는 r code를 실행하는 데 사용하는 클래스의 이름입니다. 이처럼 매우 정의 된 메소드가있는 클래스 이름을 "NewClass"로 변경해야합니다. – olyjosh