关于java:将InputStream写入文件

Write InputStream to a file

本问题已经有最佳答案,请猛点这里访问。

我有一个对象,在这个对象中我有一个包含文件的输入流。

我要将inputstream中的内容写入文件夹中的文件。

我将如何在核心Java中实现这一点呢?

我可以使用bufferedreader和.readline()打印出inputstream的每一行,但是我希望将整个文件写入磁盘,而不仅仅是其中的内容。

希望这是合理的,谢谢。


如果您使用的是Java 7或以上,可以使用EDCOX1 OR 0:

1
2
3
InputStream in = obj.getInputStrem();
Path file = ...;
Files.copy(in, path);

它还支持不同的选项(参见CopyOption实现,如StandardCopyOptionLinkOption)


很肯定它已经在外面了,你可以用谷歌搜索它。但是,当您询问如何写入文件夹内的文件时,假设inputstream变量名为"input":

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
FileOutputStream output = null;
try {
    // Create folder (if it doesn't already exist)
    File folder = new File("<path_to_folder>\\<folder_name>");
    if (!folder.exists()) {
        folder.mkdirs();
    }
    // Create output file
    output = new FileOutputStream(new File(folder,"<file_name>"));
    // Write data from input stream to output file.
    int bytesRead = 0;
    byte[] buffer = new byte[4096];
    while ((bytesRead = input.read(buffer)) != -1) {
        output.write(buffer, 0, bytesRead);
    }
} catch (IOException ioex) {
    ioex.printStackTrace();
} finally {
    try {
        if (output != null) {
            output.close();
        }
    } catch (IOException ioex) {
        ioex.printStackTrace();
    }
    // Also close InputStream if no longer needed.
    try {
        if (input != null) {
            input.close();
        }
    } catch (IOException ioex) {
        ioex.printStackTrace();
    }
}