File integrity while replacing 2 Strings in a file











up vote
-1
down vote

favorite












Task



I want to handle a XML file from a source I cannot influence. All XML files from this source have the "problem" that the < and >symbols are represented by &lt; and &gt; respectively.



Problem



My program only sees the file on the local hard drive and is not influencing the genration of this file. The file size will never exceed 50 MiB. I encountered problems when parsing this XML file with the java DOM library and therefore decided to replace all occurences of &lt; and &gt; with their corresponding symbols.



Concern/Current solution



What I am concerned with, however, is the integrity of the file. So I came up with a solution using a temporary file.



private void modifyLog() throws FileNotFoundException, IOException {
Path logFile = Paths.get(ConfigFileLoader.getInstance().getLogFileOption());
if(!Files.isRegularFile(logFile)) {
throw new FileNotFoundException("Log '" + logFile.toString() + "' not modified.");
} else {
Path tmpFile = Files.createTempFile("log_modified", "xml.tmp");

try (FileWriter fw = new FileWriter(tmpFile.toAbsolutePath().toString())) {
try (BufferedReader br = new BufferedReader(new FileReader(logFile.toAbsolutePath().toString()))) {
while(br.ready()) {
fw.write(br.readLine().replaceAll("&lt;", "<").replaceAll("&gt;", ">"));
fw.write(System.lineSeparator());
}
}
}

Files.copy(tmpFile, logFile, StandardCopyOption.REPLACE_EXISTING);
PackageBase.logger.trace("Successfully modified logfile at '{}'", logFile.toAbsolutePath().toString());
}
}


Question



Does the above code snippet make sure that either the original file remains untouched or all strings mentioned above got replaced in the original file?

What do you think about the usage of the try-with-resources block?

Although the performance has already proven to be good enough for my application, could/should I further improve the runtime of the replacement process?










share|improve this question







New contributor




Der_Reparator is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
























    up vote
    -1
    down vote

    favorite












    Task



    I want to handle a XML file from a source I cannot influence. All XML files from this source have the "problem" that the < and >symbols are represented by &lt; and &gt; respectively.



    Problem



    My program only sees the file on the local hard drive and is not influencing the genration of this file. The file size will never exceed 50 MiB. I encountered problems when parsing this XML file with the java DOM library and therefore decided to replace all occurences of &lt; and &gt; with their corresponding symbols.



    Concern/Current solution



    What I am concerned with, however, is the integrity of the file. So I came up with a solution using a temporary file.



    private void modifyLog() throws FileNotFoundException, IOException {
    Path logFile = Paths.get(ConfigFileLoader.getInstance().getLogFileOption());
    if(!Files.isRegularFile(logFile)) {
    throw new FileNotFoundException("Log '" + logFile.toString() + "' not modified.");
    } else {
    Path tmpFile = Files.createTempFile("log_modified", "xml.tmp");

    try (FileWriter fw = new FileWriter(tmpFile.toAbsolutePath().toString())) {
    try (BufferedReader br = new BufferedReader(new FileReader(logFile.toAbsolutePath().toString()))) {
    while(br.ready()) {
    fw.write(br.readLine().replaceAll("&lt;", "<").replaceAll("&gt;", ">"));
    fw.write(System.lineSeparator());
    }
    }
    }

    Files.copy(tmpFile, logFile, StandardCopyOption.REPLACE_EXISTING);
    PackageBase.logger.trace("Successfully modified logfile at '{}'", logFile.toAbsolutePath().toString());
    }
    }


    Question



    Does the above code snippet make sure that either the original file remains untouched or all strings mentioned above got replaced in the original file?

    What do you think about the usage of the try-with-resources block?

    Although the performance has already proven to be good enough for my application, could/should I further improve the runtime of the replacement process?










    share|improve this question







    New contributor




    Der_Reparator is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
    Check out our Code of Conduct.






















      up vote
      -1
      down vote

      favorite









      up vote
      -1
      down vote

      favorite











      Task



      I want to handle a XML file from a source I cannot influence. All XML files from this source have the "problem" that the < and >symbols are represented by &lt; and &gt; respectively.



      Problem



      My program only sees the file on the local hard drive and is not influencing the genration of this file. The file size will never exceed 50 MiB. I encountered problems when parsing this XML file with the java DOM library and therefore decided to replace all occurences of &lt; and &gt; with their corresponding symbols.



      Concern/Current solution



      What I am concerned with, however, is the integrity of the file. So I came up with a solution using a temporary file.



      private void modifyLog() throws FileNotFoundException, IOException {
      Path logFile = Paths.get(ConfigFileLoader.getInstance().getLogFileOption());
      if(!Files.isRegularFile(logFile)) {
      throw new FileNotFoundException("Log '" + logFile.toString() + "' not modified.");
      } else {
      Path tmpFile = Files.createTempFile("log_modified", "xml.tmp");

      try (FileWriter fw = new FileWriter(tmpFile.toAbsolutePath().toString())) {
      try (BufferedReader br = new BufferedReader(new FileReader(logFile.toAbsolutePath().toString()))) {
      while(br.ready()) {
      fw.write(br.readLine().replaceAll("&lt;", "<").replaceAll("&gt;", ">"));
      fw.write(System.lineSeparator());
      }
      }
      }

      Files.copy(tmpFile, logFile, StandardCopyOption.REPLACE_EXISTING);
      PackageBase.logger.trace("Successfully modified logfile at '{}'", logFile.toAbsolutePath().toString());
      }
      }


      Question



      Does the above code snippet make sure that either the original file remains untouched or all strings mentioned above got replaced in the original file?

      What do you think about the usage of the try-with-resources block?

      Although the performance has already proven to be good enough for my application, could/should I further improve the runtime of the replacement process?










      share|improve this question







      New contributor




      Der_Reparator is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.











      Task



      I want to handle a XML file from a source I cannot influence. All XML files from this source have the "problem" that the < and >symbols are represented by &lt; and &gt; respectively.



      Problem



      My program only sees the file on the local hard drive and is not influencing the genration of this file. The file size will never exceed 50 MiB. I encountered problems when parsing this XML file with the java DOM library and therefore decided to replace all occurences of &lt; and &gt; with their corresponding symbols.



      Concern/Current solution



      What I am concerned with, however, is the integrity of the file. So I came up with a solution using a temporary file.



      private void modifyLog() throws FileNotFoundException, IOException {
      Path logFile = Paths.get(ConfigFileLoader.getInstance().getLogFileOption());
      if(!Files.isRegularFile(logFile)) {
      throw new FileNotFoundException("Log '" + logFile.toString() + "' not modified.");
      } else {
      Path tmpFile = Files.createTempFile("log_modified", "xml.tmp");

      try (FileWriter fw = new FileWriter(tmpFile.toAbsolutePath().toString())) {
      try (BufferedReader br = new BufferedReader(new FileReader(logFile.toAbsolutePath().toString()))) {
      while(br.ready()) {
      fw.write(br.readLine().replaceAll("&lt;", "<").replaceAll("&gt;", ">"));
      fw.write(System.lineSeparator());
      }
      }
      }

      Files.copy(tmpFile, logFile, StandardCopyOption.REPLACE_EXISTING);
      PackageBase.logger.trace("Successfully modified logfile at '{}'", logFile.toAbsolutePath().toString());
      }
      }


      Question



      Does the above code snippet make sure that either the original file remains untouched or all strings mentioned above got replaced in the original file?

      What do you think about the usage of the try-with-resources block?

      Although the performance has already proven to be good enough for my application, could/should I further improve the runtime of the replacement process?







      java file-system io






      share|improve this question







      New contributor




      Der_Reparator is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.











      share|improve this question







      New contributor




      Der_Reparator is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      share|improve this question




      share|improve this question






      New contributor




      Der_Reparator is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      asked 15 hours ago









      Der_Reparator

      12




      12




      New contributor




      Der_Reparator is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.





      New contributor





      Der_Reparator is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.






      Der_Reparator is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.



























          active

          oldest

          votes











          Your Answer





          StackExchange.ifUsing("editor", function () {
          return StackExchange.using("mathjaxEditing", function () {
          StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
          StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
          });
          });
          }, "mathjax-editing");

          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "196"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          convertImagesToLinks: false,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: null,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });






          Der_Reparator is a new contributor. Be nice, and check out our Code of Conduct.










          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f209428%2ffile-integrity-while-replacing-2-strings-in-a-file%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown






























          active

          oldest

          votes













          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes








          Der_Reparator is a new contributor. Be nice, and check out our Code of Conduct.










          draft saved

          draft discarded


















          Der_Reparator is a new contributor. Be nice, and check out our Code of Conduct.













          Der_Reparator is a new contributor. Be nice, and check out our Code of Conduct.












          Der_Reparator is a new contributor. Be nice, and check out our Code of Conduct.
















          Thanks for contributing an answer to Code Review Stack Exchange!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          Use MathJax to format equations. MathJax reference.


          To learn more, see our tips on writing great answers.





          Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


          Please pay close attention to the following guidance:


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f209428%2ffile-integrity-while-replacing-2-strings-in-a-file%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Quarter-circle Tiles

          build a pushdown automaton that recognizes the reverse language of a given pushdown automaton?

          Mont Emei