字节流
字节输出流(OutputStream)
java.io.OutputStream
是字节输出流的超类(父类),我们来看一下它定义的一些共性方法:
1、 close()
:关闭此输出流并释放与此流相关联的系统资源。
2、 flush()
:刷新此输出流并强制缓冲区的字节被写入到目的地。
3、 write(byte[] b)
:将 b.length 个字节从指定的字节数组写入此输出流。
4、 write(byte[] b, int off, int len)
:从指定的字节数组写入 len 字节到此输出流,从偏移量 off开始。 也就是说从off个字节数开始一直到len个字节结束
FileOutputStream 类
构造方法
1、使用文件名创建 FileOutputStream 对象。
String fileName = "example.txt"; FileOutputStream fos = new FileOutputStream(fileName);
以上代码使用文件名 "example.txt" 创建一个 FileOutputStream 对象,将数据写入到该文件中。如果文件不存在,则创建一个新文件;如果文件已经存在,则覆盖原有文件。
2、使用文件对象创建 FileOutputStream 对象。
File file = new File("example.txt"); FileOutputStream fos = new FileOutputStream(file);
写入字节数据
写入字节 write(int b)
每次可以写入一个字节:
// 使用文件名称创建流对象 FileOutputStream fos = new FileOutputStream("fos.txt"); // 写出数据 fos.write(97); // 第1个字节 fos.write(98); // 第2个字节 fos.write(99); // 第3个字节 // 关闭资源 fos.close();
写入字节数组:write(byte[] b)
// 使用文件名称创建流对象 FileOutputStream fos = new FileOutputStream("fos.txt"); // 字符串转换为字节数组 byte[] b = "xxx".getBytes(); // 写入字节数组数据 fos.write(b); // 关闭资源 fos.close();
写入指定长度字节数组:write(byte[] b, int off, int len)
// 使用文件名称创建流对象 FileOutputStream fos = new FileOutputStream("fos.txt"); // 字符串转换为字节数组 byte[] b = "abcde".getBytes(); // 从索引2开始,2个字节。索引2是c,两个字节,也就是cd。 fos.write(b,2,2); // 关闭资源 fos.close();
数据追加、换行
使用文件名和追加标志创建 FileOutputStream 对象:
String fileName = "example.txt"; boolean append = true; FileOutputStream fos = new FileOutputStream(fileName, append);
使用文件对象和追加标志创建 FileOutputStream 对象:
File file = new File("example.txt"); boolean append = true; FileOutputStream fos = new FileOutputStream(file, append);
实现数据追加代码如下:
// 使用文件名称创建流对象 FileOutputStream fos = new FileOutputStream("fos.txt",true); // 字符串转换为字节数组 byte[] b = "abcde".getBytes(); // 写出从索引2开始,2个字节。索引2是c,两个字节,也就是cd。 fos.write(b); // 关闭资源 fos.close();
在 Windows 系统中,换行符号是\r\n
,在 macOS 系统中,换行符是 \n
。
字节输入流
java.io.InputStream
是字节输入流的超类(父类),我们来看一下它的一些共性方法:
1、close()
:关闭此输入流并释放与此流相关的系统资源。
2、int read()
: 从输入流读取数据的下一个字节。
3、read(byte[] b)
: 该方法返回的 int 值代表的是读取了多少个字节,读到几个返回几个,读取不到返回-1
FileInputStream 类
构造方法
1、FileInputStream(String name)
:创建一个 FileInputStream 对象,并打开指定名称的文件进行读取。文件名由 name 参数指定。如果文件不存在,将会抛出 FileNotFoundException 异常。
2、FileInputStream(File file)
:创建一个 FileInputStream 对象,并打开指定的 File 对象表示的文件进行读取。
代码示例如下:
// 创建一个 FileInputStream 对象 FileInputStream fis = new FileInputStream("test.txt"); // 读取文件内容 int data; while ((data = fis.read()) != -1) { System.out.print((char) data); } // 关闭输入流 fis.close();
读取方法
读取字节:read()
读取一个字节并返回其整数表示。如果已经到达文件的末尾,则返回 -1。如果在读取时发生错误,则会抛出 IOException 异常:
// 创建一个 FileInputStream 对象 FileInputStream fis = new FileInputStream("test.txt"); // 读取文件内容 int data; while ((data = fis.read()) != -1) { System.out.print((char) data); } // 关闭输入流 fis.close();
使用字节数组读取:read(byte[] b)
从输入流中最多读取 b.length 个字节,并将它们存储到缓冲区数组 b 中:
// 创建一个 FileInputStream 对象 FileInputStream fis = new FileInputStream("test.txt"); // 读取文件内容到缓冲区 byte[] buffer = new byte[1024]; int count; while ((count = fis.read(buffer)) != -1) { System.out.println(new String(buffer, 0, count)); } // 关闭输入流 fis.close();
复制图片
// 创建一个 FileInputStream 对象以读取原始图片文件 FileInputStream fis = new FileInputStream("original.jpg"); // 创建一个 FileOutputStream 对象以写入复制后的图片文件 FileOutputStream fos = new FileOutputStream("copy.jpg"); // 创建一个缓冲区数组以存储读取的数据 byte[] buffer = new byte[1024]; int count; // 读取原始图片文件并将数据写入复制后的图片文件 while ((count = fis.read(buffer)) != -1) { fos.write(buffer, 0, count); } // 关闭输入流和输出流 fis.close(); fos.close();
本文作者:n1ce2cv
本文链接:https://www.cnblogs.com/sprinining/p/18335357
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步