java io系列07之 FileInputStream和FileOutputStream

简介: 本章介绍FileInputStream 和 FileOutputStream  转载请注明出处:http://www.cnblogs.com/skywang12345/p/io_07.html FileInputStream 和 FileOutputStream 介绍 FileInputStream 是文件输入流,它继承于InputStream。

本章介绍FileInputStream 和 FileOutputStream 

转载请注明出处:http://www.cnblogs.com/skywang12345/p/io_07.html

FileInputStream 和 FileOutputStream 介绍

FileInputStream 是文件输入流,它继承于InputStream。
通常,我们使用FileInputStream从某个文件中获得输入字节。
FileOutputStream 是文件输出流,它继承于OutputStream。
通常,我们使用FileOutputStream 将数据写入 File 或 FileDescriptor 的输出流。

关于File的介绍,可以参考文章“java io系列08之 File总结” 。
关于FileDescriptor的介绍,可以参考文章“java io系列09之 FileDescriptor总结”。

FileInputStream 函数接口

复制代码
FileInputStream(File file)         // 构造函数1:创建“File对象”对应的“文件输入流”
FileInputStream(FileDescriptor fd) // 构造函数2:创建“文件描述符”对应的“文件输入流”
FileInputStream(String path)       // 构造函数3:创建“文件(路径为path)”对应的“文件输入流” int available() // 返回“剩余的可读取的字节数”或者“skip的字节数” void close() // 关闭“文件输入流” FileChannel getChannel() // 返回“FileChannel” final FileDescriptor getFD() // 返回“文件描述符” int read() // 返回“文件输入流”的下一个字节 int read(byte[] buffer, int byteOffset, int byteCount) // 读取“文件输入流”的数据并存在到buffer,从byteOffset开始存储,存储长度是byteCount。 long skip(long byteCount) // 跳过byteCount个字节
复制代码

FileOutputStream 函数接口

复制代码
FileOutputStream(File file)                   // 构造函数1:创建“File对象”对应的“文件输入流”;默认“追加模式”是false,即“写到输出的流内容”不是以追加的方式添加到文件中。
FileOutputStream(File file, boolean append)   // 构造函数2:创建“File对象”对应的“文件输入流”;指定“追加模式”。
FileOutputStream(FileDescriptor fd)           // 构造函数3:创建“文件描述符”对应的“文件输入流”;默认“追加模式”是false,即“写到输出的流内容”不是以追加的方式添加到文件中。 FileOutputStream(String path) // 构造函数4:创建“文件(路径为path)”对应的“文件输入流”;默认“追加模式”是false,即“写到输出的流内容”不是以追加的方式添加到文件中。 FileOutputStream(String path, boolean append) // 构造函数5:创建“文件(路径为path)”对应的“文件输入流”;指定“追加模式”。 void close() // 关闭“输出流” FileChannel getChannel() // 返回“FileChannel” final FileDescriptor getFD() // 返回“文件描述符” void write(byte[] buffer, int byteOffset, int byteCount) // 将buffer写入到“文件输出流”中,从buffer的byteOffset开始写,写入长度是byteCount。 void write(int oneByte) // 写入字节oneByte到“文件输出流”中
复制代码

示例程序

关于FileInputStream和FileOutputStream的API用法,参考示例代码(FileStreamTest.java): 

复制代码
  1 import java.io.File;
  2 import java.io.FileDescriptor;  3 import java.io.FileInputStream;  4 import java.io.FileOutputStream;  5 import java.io.BufferedInputStream;  6 import java.io.BufferedOutputStream;  7 import java.io.PrintStream;;  8 import java.io.IOException;  9  10 /**  11  * FileInputStream 和FileOutputStream 测试程序  12  *  13  * @author skywang  14 */  15 public class FileStreamTest {  16  17 private static final String FileName = "file.txt";  18  19 public static void main(String[] args) {  20  testWrite();  21  testRead();  22  }  23  24 /**  25  * FileOutputStream 演示函数  26  *  27  * 运行结果:  28  * 在源码所在目录生成文件"file.txt",文件内容是“abcdefghijklmnopqrstuvwxyz0123456789”  29  *  30  * 加入,我们将 FileOutputStream fileOut2 = new FileOutputStream(file, true);  31  * 修改为 FileOutputStream fileOut2 = new FileOutputStream(file, false);  32  * 然后再执行程序,“file.txt”的内容变成"0123456789"。  33  * 原因是:  34  * (01) FileOutputStream fileOut2 = new FileOutputStream(file, true);  35  * 它是以“追加模式”将内容写入文件的。即写入的内容,追加到原始的内容之后。  36  * (02) FileOutputStream fileOut2 = new FileOutputStream(file, false);  37  * 它是以“新建模式”将内容写入文件的。即删除文件原始的内容之后,再重新写入。  38 */  39 private static void testWrite() {  40 try {  41 // 创建文件“file.txt”对应File对象  42 File file = new File(FileName);  43 // 创建文件“file.txt”对应的FileOutputStream对象,默认是关闭“追加模式”  44 FileOutputStream fileOut1 = new FileOutputStream(file);  45 // 创建FileOutputStream对应的PrintStream,方便操作。PrintStream的写入接口更便利  46 PrintStream out1 = new PrintStream(fileOut1);  47 // 向“文件中”写入26个字母  48 out1.print("abcdefghijklmnopqrstuvwxyz");  49  out1.close();  50  51 // 创建文件“file.txt”对应的FileOutputStream对象,打开“追加模式”  52 FileOutputStream fileOut2 = new FileOutputStream(file, true);  53 // 创建FileOutputStream对应的PrintStream,方便操作。PrintStream的写入接口更便利  54 PrintStream out2 = new PrintStream(fileOut2);  55 // 向“文件中”写入"0123456789"+换行符  56 out2.println("0123456789");  57  out2.close();  58  59 } catch(IOException e) {  60  e.printStackTrace();  61  }  62  }  63  64 /**  65  * FileInputStream 演示程序  66 */  67 private static void testRead() {  68 try {  69 // 方法1:新建FileInputStream对象  70 // 新建文件“file.txt”对应File对象  71 File file = new File(FileName);  72 FileInputStream in1 = new FileInputStream(file);  73  74 // 方法2:新建FileInputStream对象  75 FileInputStream in2 = new FileInputStream(FileName);  76  77 // 方法3:新建FileInputStream对象  78 // 获取文件“file.txt”对应的“文件描述符”  79 FileDescriptor fdin = in2.getFD();  80 // 根据“文件描述符”创建“FileInputStream”对象 81 FileInputStream in3 = new FileInputStream(fdin); 82 83 // 测试read(),从中读取一个字节 84 char c1 = (char)in1.read(); 85 System.out.println("c1="+c1); 86 87 // 测试skip(long byteCount),跳过4个字节 88 in1.skip(25); 89 90 // 测试read(byte[] buffer, int byteOffset, int byteCount) 91 byte[] buf = new byte[10]; 92 in1.read(buf, 0, buf.length); 93 System.out.println("buf="+(new String(buf))); 94 95 96 // 创建“FileInputStream”对象对应的BufferedInputStream 97 BufferedInputStream bufIn = new BufferedInputStream(in3); 98 // 读取一个字节 99 char c2 = (char)bufIn.read(); 100 System.out.println("c2="+c2); 101 102 in1.close(); 103 in2.close(); 104 in3.close(); 105 } catch(IOException e) { 106 e.printStackTrace(); 107 } 108 } 109 }
复制代码

运行结果

c1=a
buf=0123456789
c2=a

结果说明
运行程序,会在源码所在位置新生成一个文件“file.txt”。它的内容是“abcdefghijklmnopqrstuvwxyz0123456789”。

 

相关文章
|
21天前
|
Java
java 中 IO 流
Java中的IO流是用于处理输入输出操作的机制,主要包括字节流和字符流两大类。字节流以8位字节为单位处理数据,如FileInputStream和FileOutputStream;字符流以16位Unicode字符为单位,如FileReader和FileWriter。这些流提供了读写文件、网络传输等基本功能。
40 9
|
2月前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
88 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
3月前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
|
2月前
|
Java 数据处理 开发者
揭秘Java IO流:字节流与字符流的神秘面纱!
揭秘Java IO流:字节流与字符流的神秘面纱!
39 1
|
2月前
|
自然语言处理 Java 数据处理
Java IO流全解析:字节流和字符流的区别与联系!
Java IO流全解析:字节流和字符流的区别与联系!
97 1
|
3月前
|
Java 大数据 API
Java 流(Stream)、文件(File)和IO的区别
Java中的流(Stream)、文件(File)和输入/输出(I/O)是处理数据的关键概念。`File`类用于基本文件操作,如创建、删除和检查文件;流则提供了数据读写的抽象机制,适用于文件、内存和网络等多种数据源;I/O涵盖更广泛的输入输出操作,包括文件I/O、网络通信等,并支持异常处理和缓冲等功能。实际开发中,这三者常结合使用,以实现高效的数据处理。例如,`File`用于管理文件路径,`Stream`用于读写数据,I/O则处理复杂的输入输出需求。
236 12
|
2月前
|
Java
Java 中 IO 流的分类详解
【10月更文挑战第10天】不同类型的 IO 流具有不同的特点和适用场景,我们可以根据具体的需求选择合适的流来进行数据的输入和输出操作。在实际应用中,还可以通过组合使用多种流来实现更复杂的功能。
63 0
|
3月前
|
Java
Java-FileInputStream和FileOutputStream的使用,txt文件及图片文件的拷贝
这篇文章介绍了Java中FileInputStream和FileOutputStream的使用,包括如何读取和写入txt文件以及如何拷贝图片文件。
Java-FileInputStream和FileOutputStream的使用,txt文件及图片文件的拷贝
|
2月前
|
存储 Java 程序员
【Java】文件IO
【Java】文件IO
39 0
|
3月前
|
数据采集 Java 数据挖掘
Java IO异常处理:在Web爬虫开发中的实践
Java IO异常处理:在Web爬虫开发中的实践