将InputStream转换为Java中的文件对象
我们经常需要创建文件并向其中添加内容。 例如,我们需要将通过网络接收的字节或字符串元素保存到文件中。
在每种情况下,数据都以 InputStream 形式出现,并且必须写入文件。 今天的教程讨论如何在Java中将InputStream转换为File对象。
为此,我们将根据 Java 版本,使用不同的方式编写不同的示例代码,将 InputStream 转换为 File 对象。 下面给出了一些方法:
使用纯Java将InputStream转换为文件对象
示例代码:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class plainJava {
public static void main(String[] args) {
try {
InputStream inputStream = new FileInputStream(
new File("./files/test.txt"));
byte[] buffer = new byte[inputStream.available()];
inputStream.read(buffer);
File destinationFile = new File("./files/test-plainJava-output.txt");
OutputStream outputStream = new FileOutputStream(destinationFile);
outputStream.write(buffer);
} catch (FileNotFoundException exception) {
exception.printStackTrace();
} catch (IOException exception) {
exception.printStackTrace();
}
}
}
我们在上面的Java程序中通过指定文件路径来实例化FileInputStream。 如果文件不存在或者拼写错误,它将生成 FileNotFoundException 异常。
我们使用 FileInputStream 从给定文件中检索输入字节。 然后,我们创建一个名为 buffer 的 byte 类型数组,其中 inputStream.available() 方法告诉我们可以读取的字节数,直到 read() 调用阻塞程序的执行流程。
之后,我们实例化 File 类以创建 test-plainJava-output.txt 文件并将其引用保存在 destinationFile 变量中。 接下来,我们创建一个 FileOutputStream 对象,传递我们在上一步中创建的目标文件的引用,并写入字节码。
现在,打开 test.txt 和 test-plainJava-output.txt 文件,可以看到两者具有相同的内容。 请记住,如果在读取或写入信息时遇到任何问题,我们可能会收到 IOException。
Java中使用Files.copy()方法将InputStream转换为File对象
示例代码:
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.nio.file.Files;
import java.nio.file.Paths;
public class filesCopy {
private static final String OUTPUT_FILE = "./files/test_filesCopy-output.txt";
public static void main(String[] args) {
URI u = URI.create("https://www.google.com/");
try (InputStream inputStream = u.toURL().openStream()) {
// Java 1.7 onwards
Files.copy(inputStream, Paths.get(OUTPUT_FILE));
} catch (IOException e) {
e.printStackTrace();
}
}
}
我们可以在 Java 7 或更高版本中使用这种方法。 在上面的代码栅栏中,我们使用Java NIO API的Files.copy(),它用于将InputStream对象复制到文件对象,如上所示。
在filesCopy程序中,我们首先创建一个String类型的对象来包含输出文件的路径。
在 main()
方法中,我们使用 create()
方法创建一个 URI 对象,并将其引用保存在 u 变量中,该变量将在下一步中使用。 请记住,当我们确定指定的字符串值将被解析为 URI 对象时,我们会使用 create() ; 否则会被认为是程序员的错误。
接下来,我们使用 URI 对象 u 调用 toURL()
方法从该 URI 构造 URL,并使用 openStream()
方法获取 java.io.InputSteam 对象。 之后,我们使用 Files.copy()
方法,该方法采用两个参数:inputStream 对象和要复制数据的文件的路径。
现在,我们将在输出文件 test_filesCopy-output.txt 中看到解析后的数据。 如果发生异常,我们使用 try-catch 块来处理; 否则,程序将终止执行。
Java中使用InputStream.transferTo()方法将InputStream转换为文件对象
示例代码:
import java.io.*;
import java.net.URI;
public class inputStreamTransferTo {
public static void main(String[] args) {
URI u = URI.create("https://www.google.com/");
try (InputStream inputStream = u.toURL().openStream()) {
File outputFile = new File("./files/test_transferTo-output.txt");
OutputStream outputStream = new FileOutputStream(outputFile, false);
inputStream.transferTo(outputStream); //Java 9
} catch (IOException e) {
e.printStackTrace();
}
}
}
如果我们有 Java 9 或更高版本,我们可以使用这种方法。 此代码示例与我们使用 Files.copy() 方法的上一个示例类似,只是 try 块中存在一些差异。
在这里,我们通过指定输出文件(在本例中为 test_transferTo-output.txt)来创建 File 类的对象。 然后,我们使用此 File 对象实例化 FileOutputStream 类,我们将使用该类将数据写入输出文件 (test_transferTo_output.txt)。
最后,我们使用inputStream.transferTo()方法,该方法以输出流为参数,直接将inputStream复制到指定的outputSteam。 现在,您将在输出文件 test_transferTo_output.txt 中获得解析后的数据。
我们还将这段代码包含在 try-catch 块中以避免程序终止。
使用 Apache Commons IO API 将 InputStream 转换为 Java 中的文件对象
示例代码:
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
public class apacheCommons {
public static void main(String[] args) throws IOException {
URI u = URI.create("https://www.google.com/");
try (InputStream inputStream = u.toURL().openStream()) {
File outputFile = new File("./files/test_apache_output.txt");
// commons-io
FileUtils.copyInputStreamToFile(inputStream, outputFile);
}
}
}
此示例代码与前面的代码类似。 我们创建一个 URI 对象来调用 toURL,它将通过这个 URI 对象构建一个 URL,使用 openStream()
方法获取 java.io.InputStream 对象,并实例化指向输出文件 test_apache_output 的路径的 File 类 .txt 在这里。
但是,我们使用 Apache Commons IO API 将输入流转换为 Java 中的文件对象。 这个API非常方便,提供了各种功能来执行不同的文件输入/输出操作。
要使用这个库,我们首先必须在 pom.xml 文件中添加 commons-io 依赖项,如下所示:
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.7</version>
</dependency>
然后,我们可以使用 copyInputStreamToFile()
方法从输入流中读取字节并将其复制到指定文件中。 现在,您可以在 test_apache_output.txt 文件中看到解析的数据,该文件是一个输出文件。
相关文章
如何在 Java 中延迟几秒钟的时间
发布时间:2023/12/17 浏览次数:217 分类:Java
-
本篇文章主要介绍如何在 Java 中制造程序延迟。本教程介绍了如何在 Java 中制造程序延时,并列举了一些示例代码来了解它。
如何在 Java 中把 Hashmap 转换为 JSON 对象
发布时间:2023/12/17 浏览次数:187 分类:Java
-
它描述了允许我们将哈希图转换为简单的 JSON 对象的方法。本文介绍了在 Java 中把 Hashmap 转换为 JSON 对象的方法。我们将看到关于创建一个 hashmap,然后将其转换为 JSON 对象的详细例子。
如何在 Java 中按值排序 Map
发布时间:2023/12/17 浏览次数:171 分类:Java
-
本文介绍了如何在 Java 中按值对 Map 进行排序。本教程介绍了如何在 Java 中按值对 Map
进行排序,并列出了一些示例代码来理解它。
如何在 Java 中打印 HashMap
发布时间:2023/12/17 浏览次数:192 分类:Java
-
本帖介绍了如何在 Java 中打印 HashMap。本教程介绍了如何在 Java 中打印 HashMap 元素,还列举了一些示例代码来理解这个主题。
在 Java 中更新 Hashmap 的值
发布时间:2023/12/17 浏览次数:146 分类:Java
-
本文介绍了如何在 Java 中更新 HashMap 中的一个值。本文介绍了如何在 Java 中使用 HashMap 类中包含的两个方法-put() 和 replace() 更新 HashMap 中的值。
Java 中的 hashmap 和 map 之间的区别
发布时间:2023/12/17 浏览次数:79 分类:Java
-
本文介绍了 Java 中的 hashmap 和 map 接口之间的区别。本教程介绍了 Java 中 Map 和 HashMap 之间的主要区别。在 Java 中,Map 是用于以键值对存储数据的接口,
在 Java 中获取用户主目录
发布时间:2023/12/17 浏览次数:218 分类:Java
-
这篇文章向你展示了如何在 Java 中获取用户主目录。本教程介绍了如何在 Java 中获取用户主目录,并列出了一些示例代码以指导你完成该主题。
Java 中 size 和 length 的区别
发布时间:2023/12/17 浏览次数:179 分类:Java
-
这篇文章教你如何知道 Java 中大小和长度之间的区别。本教程介绍了 Java 中大小和长度之间的区别。我们还列出了一些示例代码以帮助你理解该主题。
Java 中的互斥锁
发布时间:2023/12/17 浏览次数:111 分类:Java
-
了解有关 Java 中互斥锁的一切,在计算机科学领域,互斥或互斥被称为并发控制的属性。每台计算机都使用称为线程的最小程序指令序列。有一次,计算机在一个线程上工作。为了更好地理解,