Java file not written to stream with new line characters

file, java, streaming, web-services

Solution

Don't use `BufferedReader`. You already have an `OutputStream` at hands, so just get an `InputStream` of the file and pipe the bytes from input to output it the usual Java IO way. This way you also don't need to worry about newlines being eaten by `BufferedReader`:

public static void writeFile(OutputStream output, File file) throws IOException {
    InputStream input = null;
    byte[] buffer = new byte[10240]; // 10KB.
    try {
        input = new FileInputStream(file);
        for (int length = 0; (length = input.read(buffer)) > 0;) {
            output.write(buffer, 0, length);
        }
    } finally {
        if (input != null) try { input.close(); } catch (IOException logOrIgnore) {}
    }
}

Using a `Reader`/`Writer` would involve character encoding problems if you don't know/specify the encoding beforehand. You actually also don't need to know about them here. So just leave it aside.

To improve performance a bit more, you can always wrap the `InputStream` and `OutputStream` in an `BufferedInputStream` and `BufferedOutputStream` respectively.

Problem

We're streaming a CSV file from a web service. It appears that we're losing the new line characters when streaming - the client gets the file all on a single line. Any idea what we're doing wrong? Code: ``` public static void writeFile(OutputStream out, File file) throws IOException { BufferedReader input = new BufferedReader(new FileReader(file)); //File input stream String line; while ((line = input.readLine()) != null) { //Read file out.write(line.getBytes()); //Write to output stream out.flush(); } input.close(); } ```

Original source

Related problems