您好我有关于使用FileInputStream和FileOutputStream类的几个问题。
感谢。
答案 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
,但File
与Path
一样抽象;它可能会,也可能不会指向有效的位置。
发出时:
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...