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 <
and >
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 <
and >
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("<", "<").replaceAll(">", ">"));
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
New contributor
add a comment |
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 <
and >
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 <
and >
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("<", "<").replaceAll(">", ">"));
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
New contributor
add a comment |
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 <
and >
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 <
and >
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("<", "<").replaceAll(">", ">"));
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
New contributor
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 <
and >
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 <
and >
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("<", "<").replaceAll(">", ">"));
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
java file-system io
New contributor
New contributor
New contributor
asked 15 hours ago
Der_Reparator
12
12
New contributor
New contributor
add a comment |
add a comment |
active
oldest
votes
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.
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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