BufferedReader: read multiple lines into a single string
Solution 1
You are right, a loop would be needed here.
The usual idiom (using only plain Java) is something like this:
public String ReadBigStringIn(BufferedReader buffIn) throws IOException {
StringBuilder everything = new StringBuilder();
String line;
while( (line = buffIn.readLine()) != null) {
everything.append(line);
}
return everything.toString();
}
This removes the line breaks - if you want to retain them, don't use the readLine()
method, but simply read into a char[]
instead (and append this to your StringBuilder).
Please note that this loop will run until the stream ends (and will block if it doesn't end), so if you need a different condition to finish the loop, implement it in there.
Solution 2
I would strongly advice using library here but since Java 8 you can do this also using streams.
try (InputStreamReader in = new InputStreamReader(System.in);
BufferedReader buffer = new BufferedReader(in)) {
final String fileAsText = buffer.lines().collect(Collectors.joining());
System.out.println(fileAsText);
} catch (Exception e) {
e.printStackTrace();
}
You can notice also that it is pretty effective as joining
is using StringBuilder
internally.
Solution 3
If you just want to read the entirety of a file into a string, I suggest you use Guava's Files
class:
String text = Files.toString("filename.txt", Charsets.UTF_8);
Of course, that's assuming you want to maintain the linebreaks. If you want to remove the linebreaks, you could either load it that way and then use String.replace, or you could use Guava again:
List<String> lines = Files.readLines(new File("filename.txt"), Charsets.UTF_8);
String joined = Joiner.on("").join(lines);
Solution 4
Sounds like you want Apache IO FileUtils
String text = FileUtils.readStringFromFile(new File(filename + ".txt"));
String[] stringArray = text.split("[^0-9.+Ee-]+");
S_Wheelan
Updated on July 09, 2022Comments
-
S_Wheelan almost 2 years
I'm reading numbers from a txt file using BufferedReader for analysis. The way I'm going about this now is- reading a line using .readline, splitting this string into an array of strings using .split
public InputFile () { fileIn = null; //stuff here fileIn = new FileReader((filename + ".txt")); buffIn = new BufferedReader(fileIn); return; //stuff here }
public String ReadBigStringIn() { String line = null; try { line = buffIn.readLine(); } catch(IOException e){}; return line; }
public ProcessMain() { initComponents(); String[] stringArray; String line; try { InputFile stringIn = new InputFile(); line = stringIn.ReadBigStringIn(); stringArray = line.split("[^0-9.+Ee-]+"); // analysis etc. } }
This works fine, but what if the txt file has multiple lines of text? Is there a way to output a single long string, or perhaps another way of doing it? Maybe use
while(buffIn.readline != null) {}
? Not sure how to implement this.Ideas appreciated, thanks.