I am trying to read a file in as either UTF-8 or Windows-1252 depending on the output of this method:
public Charset getCorrectCharsetToApply() {
// Returns a Charset for either UTF-8 or Windows-1252.
}
So far, I have:
String fileName = getFileNameToReadFromUserInput();
InputStream is = new ByteArrayInputStream(fileName.getBytes());
InputStreamReader isr = new InputStreamReader(is, getCorrectCharsetToApply());
BufferedReader buffReader = new BufferedReader(isr);
The problem I'm having is converting the BufferedReader
instance to a FileReader
.
Furthermore:
- The name of the file itself (
fileName
) cannot be trusted to be a particularCharset
; sometime the file name will contain UTF-8 characters, and sometimes Windows-1252. Same goes for the file's content (however if file name and file content will always have matching charsets). - Only the logic inside
getCorrectCharsetToApply()
can select the charset to apply, so attempting to read a file by its name prior to calling this method could very well result with, Java trying to read the file name with the wrong encoding...which causes it to die!
Thanks in advance!
Note that if you are using Google Guava, you can use
Files.newReader
:So, first, as a heads up, do realize that
fileName.getBytes()
as you have there gets the bytes of the filename, not the file itself.Second, reading inside the docs of FileReader:
So, sounds like FileReader actually isn't the way to go. If we take the advice in the docs, then you should just change your code to have:
and not try to make a FileReader at all.
With Java 7+, you can create the Reader in one line:
BufferedReader buffReader = Files.newBufferedReader(Paths.get(fileName), getCorrectCharsetToApply());