Java基础-IO流对象之字节流(Stream)

时间:2022-09-19 11:48:00

                  Java基础-IO流对象之字节流(Stream)

                                      作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

  在前面我分享的笔记中,我们一直都是在操作文件或者文件夹,并没有给文件中写任何数据。现在我们就要开始给文件中写数据,或者读取文件中的数据。什么是输入呢?我们这里的输入指的是将文件的内容加载到程序中的过程叫做输入,那上面叫做输出呢?就是将程序的内容持久化到硬盘上叫做输出。

一.字节输出流(outputStream)

  java.io.OutputStream此抽象类是表示输出字节流的所有类的超类。

  作用:从Java程序将内存中的数据写入到磁盘文件中。

1>.字节输出流FileOutputStream写字节

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.note5; import java.io.FileOutputStream;
import java.io.IOException; public class FileOutputStreamDemo {
public static void main(String[] args) throws IOException {
//流对象的构造方法,可以根据路径创建文件,如果文件存在则直接清空文件内容!
FileOutputStream fos = new FileOutputStream("yinzhengjie.txt");
//往文件中写一个字节
fos.write(50);
fos.write(48);
fos.write(49);
fos.write(56);
//释放资源
fos.close();
}
}

Java基础-IO流对象之字节流(Stream)

2>.字节输出流FileOutputStream写字节数组

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.note5; import java.io.FileOutputStream;
import java.io.IOException; public class FileOutputStreamDemo {
public static void main(String[] args) throws IOException {
//流对象的构造方法,可以根据路径创建文件,如果文件存在则直接清空文件内容!
FileOutputStream fos = new FileOutputStream("yinzhengjie.txt");
//写一个字节数组
byte[] bytes = {65,66,67,68,69,70};
fos.write(bytes);
//释放资源
fos.close();
}
}

Java基础-IO流对象之字节流(Stream)

3>.字节输出流FileOutputStream写字节数组的一部分

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.note5; import java.io.FileOutputStream;
import java.io.IOException; public class FileOutputStreamDemo {
public static void main(String[] args) throws IOException {
//流对象的构造方法,可以根据路径创建文件,如果文件存在则直接清空文件内容!
FileOutputStream fos = new FileOutputStream("yinzhengjie.txt");
byte[] bytes = {65,66,67,68,69,70};
//写一个字节数组的一部分,需要传入数组对象,数组的开始索引,从开始索引开始计算需要写入的长度
fos.write(bytes,0,3);
//释放资源
fos.close();
}
}

Java基础-IO流对象之字节流(Stream)

4>.写入字节数组的简便方式(写入字符串)

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.note5; import java.io.FileOutputStream;
import java.io.IOException; public class FileOutputStreamDemo {
public static void main(String[] args) throws IOException {
//流对象的构造方法,可以根据路径创建文件,如果文件存在则直接清空文件内容!
FileOutputStream fos = new FileOutputStream("yinzhengjie.txt");
//写入字符串数组
fos.write("yinzhengjie".getBytes());
fos.close();
}
}

Java基础-IO流对象之字节流(Stream)

5>.以追加的方式写入

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.note5; import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException; public class FileOutputStreamDemo {
public static void main(String[] args) throws IOException {
File file = new File("yinzhengjie.txt");
//以追加的方式写入数据,需要在FileOutputStream的构造方法中指定参数为true.
FileOutputStream fos = new FileOutputStream(file,true);
//写入换行符
fos.write("\r\n".getBytes());
fos.write("yinzhengjie\r\n".getBytes());
fos.close();
}
}

Java基础-IO流对象之字节流(Stream)

二.IO中的异常处理

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.note5; import java.io.FileOutputStream;
import java.io.IOException; public class FileOutputStreamDemo {
public static void main(String[] args) {
//try 外面声明变量,try里面建立对象,也就是将fos的作用域提示,这样就可以让finally作用域可以访问到。
FileOutputStream fos = null; try {
//注意,这里给的盘符如果不存在的话就会创建失败,此时fos的值就位null。
fos = new FileOutputStream("D:\\10.Java\\JavaSE\\eclipse\\Myprogram\\workspace\\Day8\\yinzhengjie.txt");
fos.write("yinzhengjie".getBytes()); } catch (IOException e) {
//如果硬件问题应该让用户重试,比如用户在写入数据的时候拔掉U盘。
System.out.println(e.getMessage());
throw new RuntimeException("文件写入失败,请重试!");
}finally {
try {
//在释放资源的时候需要对流对象进行判断是否为null,如果不是null。表示对象建立成功,需要关闭资源。
if(fos!=null) {
fos.close();
}
} catch (IOException e) {
throw new RuntimeException("关闭资源失败!");
}
}
}
}

三.字节输入流InputStream

  java.io.InputStream此抽象类是表示输出字节流的所有类的超类。

  作用:将磁盘文件文件内容加载到内存中来。

1>.按照一个字节进行读取

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.note5; import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException; public class FileInputStreamDemo {
public static void main(String[] args) throws IOException {
File file = new File("D:\\10.Java\\JavaSE\\eclipse\\Myprogram\\workspace\\Day8\\yinzhengjie.txt");
FileInputStream fis = new FileInputStream(file);
int index = 0;
//依次读取一个字节,当读到文件末尾时index的值为-1,因此称为结束循环的条件。
while((index = fis.read()) != -1) {
System.out.print((char)index);
}
fis.close();
}
} /*
以上代码执行结果如下:
yinzhengjie
Java
2018
Bg Date
golang
Python
Linux
shell
*/

2>.按照一个字节数组进行读取数据

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.note5; import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException; public class FileInputStreamDemo {
public static void main(String[] args) throws IOException {
File file = new File("D:\\10.Java\\JavaSE\\eclipse\\Myprogram\\workspace\\Day8\\yinzhengjie.txt");
FileInputStream fis = new FileInputStream(file);
//创建字节数组
byte[] buf = new byte[4096];
int index ;
//依次读取一个字节,当读到文件末尾时index的值为-1,因此称为结束循环的条件。
while((index = fis.read(buf)) != -1) {
//调用字符串的构造方法,将读取的数据转换成字符串
System.out.print(new String(buf,0,index));
}
fis.close();
}
} /*
以上代码执行结果如下:
yinzhengjie
Java
2018
Bg Date
golang
Python
Linux
shell
*/

四.小试牛刀

1>.字节流复制文件读取单个字节

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.note5; import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException; public class FileCopyDemo {
public static void main(String[] args) throws IOException { FileInputStream fis = null;
FileOutputStream fos = null; try {
File src = new File("D:\\10.Java\\JavaSE\\eclipse\\Myprogram\\workspace\\Day8\\yinzhengjie.txt");
File dest = new File("D:\\10.Java\\JavaSE\\eclipse\\Myprogram\\workspace\\Day8\\yinzhengjie.backup");
//建立两个流的对象,绑定源文件和目标文件
fis = new FileInputStream(src);
fos = new FileOutputStream(dest);
//字节输入流,读取一个字节,输出流写一个字节
int index ;
while((index = fis.read()) != -1) {
fos.write(index);
}
}catch(IOException e) {
System.out.println(e.getMessage());
throw new RuntimeException("文件复制失败");
}finally {
try {
if(fos != null) {
fos.close();
}
}catch(IOException e) {
throw new RuntimeException("是否资源失败");
}finally {
try {
if(fis != null ) {
fis.close();
}
}catch(IOException e) {
throw new RuntimeException("释放资源失败");
}
}
}
}
}

Java基础-IO流对象之字节流(Stream)

2>.字节流复制文件读取字节数组

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.note5; import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException; public class FileCopyDemo {
public static void main(String[] args) throws IOException {
FileInputStream fis = null;
FileOutputStream fos = null; try {
File src = new File("D:\\10.Java\\JavaSE\\eclipse\\Myprogram\\workspace\\Day8\\yinzhengjie.txt");
File dest = new File("D:\\10.Java\\JavaSE\\eclipse\\Myprogram\\workspace\\Day8\\yinzhengjie.backup2");
//建立两个流的对象,绑定源文件和目标文件
fis = new FileInputStream(src);
fos = new FileOutputStream(dest);
//定义字节数组,缓冲数据
byte[] buf = new byte[4096];
//读取数组,写入数组
int index;
while((index = fis.read(buf)) != -1) {
fos.write(buf,0,index);
}
}catch(IOException e) {
System.out.println(e.getMessage());
throw new RuntimeException("文件复制失败");
}finally {
try {
if(fos != null) {
fos.close();
}
}catch(IOException e) {
throw new RuntimeException("是否资源失败");
}finally {
try {
if(fis != null ) {
fis.close();
}
}catch(IOException e) {
throw new RuntimeException("释放资源失败");
}
}
}
}
}

Java基础-IO流对象之字节流(Stream)

Java基础-IO流对象之字节流(Stream)的更多相关文章

  1. Java基础-IO流对象之字节缓冲流(BufferedOutputStream与BufferedInputStream)

    Java基础-IO流对象之字节缓冲流(BufferedOutputStream与BufferedInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在我们学习字 ...

  2. Java基础-IO流对象之转换流(InputStreamReader与OutoutStreamWriter)

    Java基础-IO流对象之转换流(InputStreamReader与OutoutStreamWriter) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.转换流概述 我们之前 ...

  3. Java基础-IO流对象之压缩流(ZipOutputStream)与解压缩流(ZipInputStream)

    Java基础-IO流对象之压缩流(ZipOutputStream)与解压缩流(ZipInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 之前我已经分享过很多的J ...

  4. Java基础-IO流对象之随机访问文件(RandomAccessFile)

    Java基础-IO流对象之随机访问文件(RandomAccessFile) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.RandomAccessFile简介 此类的实例支持对 ...

  5. Java基础-IO流对象之内存操作流(ByteArrayOutputStream与ByteArrayInputStream)

    Java基础-IO流对象之内存操作流(ByteArrayOutputStream与ByteArrayInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.内存 ...

  6. Java基础-IO流对象之数据流(DataOutputStream与DataInputStream)

    Java基础-IO流对象之数据流(DataOutputStream与DataInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数据流特点 操作基本数据类型 ...

  7. Java基础-IO流对象之打印流(PrintStream与PrintWriter)

    Java基础-IO流对象之打印流(PrintStream与PrintWriter) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.打印流的特性 打印对象有两个,即字节打印流(P ...

  8. Java基础-IO流对象之序列化(ObjectOutputStream)与反序列化(ObjectInputStream)

    Java基础-IO流对象之序列化(ObjectOutputStream)与反序列化(ObjectInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.对象的序 ...

  9. java基础-IO流对象之Properties集合

    java基础-IO流对象之Properties集合 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Properties集合的特点 Properties类表示了一个持久的属性集. ...

随机推荐

  1. 用Dart&Henson玩转Activity跳转

    用Dart&Henson玩转Activity跳转 Extra是Android标准的组件之间(Activity/Fragment/Service等)传递数据的方式.本文介绍了开源项目Dart的使 ...

  2. Boost.Foreach

    BOOST_FOREACH简化了C++的循环遍历序列元素. 支持的序列类型:Boost.Range识别的序列 STL容器 数组 Null-terminated String std::pair of ...

  3. 服务端生成word并压缩打包下载

    所需工具 phpwrod 库 php_zip 扩展 下载phpword库,放到类加载路径. 安装php_zip扩展 下载地址 http://pecl.php.net/package/zip linux ...

  4. asp.net Post Get提交数据转Model实例

    转自:http://blog.csdn.net/daodaowolf/article/details/8990694 此功能是将客户端HTTP协议POST GET方式提交的数据转换为某个Model实例 ...

  5. macvlan 网络隔离和连通 - 每天5分钟玩转 Docker 容器技术(57)

    上一节我们创建了两个 macvlan 并部署了容器,网络结构如下: 本节验证 macvlan 之间的连通性. bbox1 能 ping 通 bbox3,bbox2 能 ping 通 bbox4.即:同 ...

  6. P4705 玩游戏

    思路 超级麻烦... 写了一堆最后常数太大T飞了... 真的难受 发现solve函数可以不用把下一层复制上来,直接传指针就可以,下次再说写不写叭 思路 \[ ans_k=\sum_{i=1}^n\su ...

  7. vnc连接虚拟机中的CentOS7系统

    1.CentOS7 core安装gnome桌面 安装Gnome包# yum groupinstall "GNOME Desktop" "Graphical Adminis ...

  8. 使用apksigner对apk进行v2签名

    最近进行三方安全测试,剩最后一个问题: 原因是我用360加固宝之后,又用了360Signer对apk进行二次签名,而360Signer是用v1方式对apk进行签名的,所以安全检测还是不通过. 下面给出 ...

  9. Redis命令总结 (转)

    Redis命令总结   连接操作相关的命令 quit:关闭连接(connection) auth:简单密码认证 持久化 save:将数据同步保存到磁盘 bgsave:将数据异步保存到磁盘 lastsa ...

  10. 简单3D翻页相册制作教程

    3D效果看起来总是要比平面的图形看起来视觉效果要好的多,今天来教大家制作简单的3D翻页效果的视频. 视频预览链接:https://v.youku.com/v_show/id_XMzgxOTY5NzQz ...