使用FileInputStream和FileOutputStream

时间:2014-03-16 05:34:12

标签: java fileinputstream fileoutputstream

您好我有关于使用FileInputStream和FileOutputStream类的几个问题。

  1. FileInputStream对象如何定位它正在尝试读取的文件?
  2. FileOutputStream将文件保存到哪里?
  3. 感谢。

3 个答案:

答案 0 :(得分:1)

奇怪的问题,我会给出一个奇怪的答案。

第一部分:不使用它们,使用Files

final Path src = Paths.get("some/file/somewhere");
final InputStream in = Files.newInputStream(src);
// ...
final Path dst = Paths.get("another/file");
final OutputStream out = Files.newOutputStream(dst);

请注意,Path对象本质上是抽象的:没有什么能保证它们指向有效的条目。如果他们不这样做,上面的Files方法将抛出NoSuchFileException(文件不存在),或AccessDeniedException(对不起伙伴,你不能这样做)或任何相关例外。


第二部分:File*Stream

基础是相同的:如果你坚持使用Java 6,你必须使用File而不是Path,但FilePath一样抽象;它可能会,也可能不会指向有效的位置。

发出时:

final String dst = "/some/file";
new FileOutputStream(dst);

在内部,FileOutputStream将创建一个File对象;这意味着以上内容相当于:

final String dst = "/some/file";
final File f = new File(dst);
new FileOutputStream(f);

结论:不,File*Stream本身并不知道文件是否存在,只要它不尝试打开它。 Path以及File s是完全抽象的,直到您尝试对它们执行某些操作。

并帮自己一个忙:使用Java 7+提供的新文件API。您是否曾尝试使用FileInputStream发起File,但您无法阅读? FileNotFoundException。咩。 Files.newInputStream()至少会抛出一个有意义的例外......

答案 1 :(得分:0)

通常,您只需将文件对象传递给流实例化。

FileInputStream is = new FileInputStream(f);
FileOutputStream os = new FileOutputStream(f);
BufferedInputStream is2 = new BufferedInputStream(is);
BufferedOutputStream os2 = new BufferedOutputStream(os);

在使用文本文件时,还要考虑使用Printwriter作为输出流。

答案 2 :(得分:0)

关于Streams: 流是允许应用与其他程序通信的对象。

要直接回答您的问题,在Java中,我将使用Streams。

//You need to import a few classes before you begin
import java.io.FileInputStream;
import java.io.FileOutputStream;

你可以这样声明它们

FileInputStream is = new FileInputStream("filename.txt"); //this file should be located within the project folder

对于输出流,可以通过类似的方式访问它:

FileOutputStream os = new FileOutputStream("filename.txt"); //this file should be located within the project folder

更多信息:

我建议在尝试写入文本文件时使用PrintWriter。为此,您将实现以下内容:

import java.io.PrintWriter;

然后使用它来写入文件:

PrintWriter pw = new PrintWriter(OUTPUT_STREAM);

我还建议您在读取用户数据时使用Scanner类:

import java.util.Scanner;

然后用它来读取输入:

Scanner kb = new Scanner(INPUT_STREAM); //now you can access this data by using methods such as nextInt, nextDouble, etc...