Java之IO流(字节流,字符流)
IO流和Properties
IO流
IO流是指计算机与外部世界或者一个程序与计算机的其余部分的之间的接口。它对于任何计算机系统都非常关键,
因而所有 I/O 的主体实际上是内置在操作系统中的。单独的程序一般是让系统为它们完成大部分的工作。
在 Java 编程中,一直使用流的方式完成 I/O。所有 I/O 都被视为单个的字节的移动,
通过一个称为 Stream 的对象一次移动一个字节。流 I/O 用于与外部世界接触。它也在内部使用,
用于将对象转换为字节,然后再转换回对象。输入也叫做读取数据,输出也叫做作写出数据。
概述
- IO流是设备间的数据的传输.
- IO流的输入和输出(基于程序的角度,而不是基于文件的角度)
IO流的分类
数据流向:
- 输入流: 文件到程序
- 输出流: 程序到文件
数据类型(计算机内的数据存储都是以字节的形式存储的):
- 字节流: 所有的文件都可以使用字节流操作
- 字符流: 在文本文件的读取的时候,我们需要将字节转化为字符.
几个字节表示一个字符? 不一定.
基类
数据流向:
- 输入流:
- 输出流:
数据类型:
- 字节流:
- 字节输入流(InputStream):将内存中的数据输如入到指定的设备上
- 字节输出流(OutputStream):将设备上的数据输出到设备上
- 字符流:
- 字符输出流
- 字符输入流
FileOutputStream
构造方法(如果指定的文件不存在,则创建对象;存在,会清空文件中的数据(除非使用后两个构造方法,字符流同理)):
- public FileOutputStream(File file) :创建文件输出流以写入由指定的 File对象表示的文件。
- public FileOutputStream(String name) : 创建文件输出流以指定的名称写入文件(name表示操作文件的路径)。
- FileOutputStream(File file, boolean append) : 创建文件输出流以写入由指定的 File对象表示的文件,boolean类型表示是否追加内容。
- FileOutputStream(String name, boolean append) : 创建文件输出流以指定的名称写入文件,boolean类型表示是否追加内容。
常用方法:
- void write(int b) : 将指定的字节写出到文件中(97 -> a)。
- void write(byte[] b) : 将字节数组中的字节写出到文件中。
- void write(byte[] b, int off, int len) : off表示字节数组起始的索引位置,输出len个字节长度到文件中的
- void close() : 关闭此文件输出流并释放与此流相关联的任何系统资源。
使用步骤:
创建流
写入流
关闭流
public static void main(String[] args) throws Exception {
// 使用构造方法创建FileOutputStream对象
FileOutputStream fos = new FileOutputStream("F:\\bbb\\wangzhi.txt");
// FileOutputStream fos2 = new FileOutputStream(new File("F:\\bbb\\wangzhi.txt")); // 调用write方法向文件中输出内容
// int字节,查询ASICC表
fos.write(97);
fos.write(65);
fos.write(98);
fos.write(66);
fos.write(99); fos.write(new byte[]{67,100,68}); fos.close();
}
FileInputStream
构造方法(文件必须存在,不存在抛异常):
- FileInputStream(File file) : 通过打开与实际文件的连接创建一个 FileInputStream ,该文件由文件系统中的 File对象 file命名。
- FileInputStream(String name) : 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的路径名 name命名。
常用方法:
int read() : 从该输入流读取一个字节的数据。
int read(byte[] b) : 从该输入流读取最多 b.length个字节的数据为字节数组(返回的是读取到的字节的个数)。
void close() : 关闭此文件输入流并释放与流相关联的任何系统资源。
// 使用字节流复制图片
public static void main(String[] args) throws IOException { FileInputStream fis = new FileInputStream("D:\\美女.jpg"); FileOutputStream fos = new FileOutputStream("F:\\bbb\\美女.jpg"); /*long start = System.currentTimeMillis();
byte[] arr = new byte[1024 * 4];
int len;
while((len = fis.read(arr)) != -1){
fos.write(arr,0,len);
}
long end = System.currentTimeMillis();
System.out.println(end - start);*/ byte[] arr1 = new byte[1024 * 4];
int len1;
StringBuilder sb = new StringBuilder();
while((len1 = fis.read(arr1)) != -1){
sb.append(new String(arr1,0,len1));
}
fos.write(sb.toString().getBytes()); /*System.out.println(System.currentTimeMillis() - end);*/
fos.close();
fis.close(); }
字符流
使用字节流去读中文(一个中文占据3个字节)可能出现乱码.
- Writer: 写数据的流
- FileWriter
- Reader: 读数据的流
- FileReader
FileReader
构造方法:
- FileReader(String fileName)
创建一个新的 FileReader ,给定要读取的文件的名称。 - FileReader(File file)
创建一个新的 FileReader ,给出 File读取。
常用方法:
- int read()
读一个字符 - int read(char[] cbuf)
将字符读入数组。 - void close()
关闭流并释放与之相关联的任何系统资源。
FileWriter
构造方法:
- FileWriter(File file)
给一个File对象构造一个FileWriter对象。 - FileWriter(File file, boolean append)
给一个File对象构造一个FileWriter对象。 - FileWriter(String fileName)
构造一个给定文件名的FileWriter对象。 - FileWriter(String fileName, boolean append)
构造一个FileWriter对象,给出一个带有布尔值的文件名,表示是否附加写入的数据。
常用方法:
void write(char[] cbuf)
写入一个字符数组。void write(int c)
写一个字符void write(String str)
写一个字符串void write(String str, int off, int len)
写一个字符串的一部分。void flush()
刷新流。void close()
关闭流,先刷新。// 复制txt文件
public static void main(String[] args) throws IOException {
// 创建字符输入流
FileReader fr = new FileReader("wangzhi.txt"); // 创建字符输出流
FileWriter fw = new FileWriter("wangzhi2.txt"); // 读取资源
char[] arr = new char[1024];
int len;
StringBuilder sb = new StringBuilder();
while((len = fr.read(arr)) != -1){
sb.append(arr);
}
fw.write(sb.toString()); // 关闭流
fw.close();
fr.close();
}
Java之IO流(字节流,字符流)的更多相关文章
- IO流(字节流,字符流,缓冲流)
一:IO流的分类(组织架构) 根据处理数据类型的不同分为:字节流和字符流 根据数据流向不同分为:输入流和输出流 这么庞大的体系里面,常用的就那么几个,我们把它们抽取出来,如下图: 二:字符字节 ...
- java 输入输出IO流 字节流| 字符流 的缓冲流:BufferedInputStream;BufferedOutputStream;BufferedReader(Reader in);BufferedWriter(Writer out)
什么是缓冲流: 缓冲流的基本原理,是在创建流对象时,会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写,减少系统IO次数,从而提高读写的效率. 图解: 1.字节缓冲流BufferedInputStr ...
- IO 复习字节流字符流拷贝文件
/* 本地文件 URL 文件拷贝 *//*文本文件拷贝 可以通过 字符流,也可以通过字节流*/ /*二进制文件拷贝 只可以通过字节流*//* 希望这个例子能帮助搞懂 字符流与字节流的区别 */ imp ...
- IO—》字节流&字符流
字节流 一.字节输出流OutputStream OutputStream此抽象类,是表示输出字节流的所有类的超类.操作的数据都是字节,定义了输出字节流的基本共性功能方法. FileOutputStre ...
- Java文件(io)编程——文件字符流的使用
案例1: 读取一个文件并写入到另一个文件中,char[] 来中转. 首先要在E盘下创建一个文本文档,命名为test.txt,输入一些字符串. public class Demo_5 { public ...
- -1-4 java io java流 常用流 分类 File类 文件 字节流 字符流 缓冲流 内存操作流 合并序列流
File类 •文件和目录路径名的抽象表示形式 构造方法 •public File(String pathname) •public File(String parent,Stringchild) ...
- java IO流 之 字符流
字符是我们能读懂的一些文字和符号,但在计算机中存储的却是我们看不懂的byte 字节,那这就存在关于字符编码解码的问题.所以在学习Io流的字符流前我们先了解些关于编码问题. 一.字符集与字符编码 1.什 ...
- java io流(字符流) 文件打开、读取文件、关闭文件
java io流(字符流) 文件打开 读取文件 关闭文件 //打开文件 //读取文件内容 //关闭文件 import java.io.*; public class Index{ public sta ...
- JAVA之IO流(字符流)
字符流InputStreamReader和OutputStreamWriter是Writer和Read的子类:是字节流通向字符流的桥梁,也就是可以把字节流转化为字符流. InputStreamRead ...
随机推荐
- JAVA之异常处理(一)
JAVA之异常处理(一) 1.异常概述 在程序的开发过程中,可能存在各种各样的错误,有些错误是可以避免的,而有些错误却是意想不到的,在Java中把这些可能发生的错误称为异常.异常类的继承关系如下图. ...
- django-simple_tag、filter
simple_tag与filter的用法 1.支持自定义函数处理方法 2.支持模板调用 创建步骤: a.在app目录下创建templatetags文件夹 b.在templatetags中创建任意名称. ...
- PPIO去中心化存储的了解和记录
目录 介绍 FileCoin P2P技术给去中心化云存储的好处 剩余资源的再次使用 市场竞争会激发民间的智慧 PPIO的2种冗余模式 全副本模式 纠删副本模式 为什么PPIO要设计支付代理节点? 一些 ...
- Paxos共识算法
Paxos共识算法 paxos是一族用来解决分布式系统共识的基础算法,共识过程就是在一组节点上达成一个一致的结果.由于节点可能会错误,通讯消息也可能会丢失,所以建立共识是一个比较复杂的过程. paxo ...
- CentOS 7 Docker基本特性
Docker是一个开源的应用容器引擎,开发人员可以非常容易地打包已经开发好的应用,同时将应用相关的依赖包也打包到这样一个可移植的容器中,然后发布到任意的Linux主机系统上.Docker是基于Linu ...
- runlevel 命令详解
基础命令学习目录首页 原文链接:https://blog.csdn.net/PecoVio/article/details/82428883 runlevel 知识扩展 linux操作系统自从开始启动 ...
- 最详细的springmvc-mybatis教程
链接:http://blog.csdn.net/qq598535550/article/details/51703190
- No.10_分数分配
C#队一共有7名成员,因此团队贡献分一共350分. 分配方式应当反映绝大部分组员的真实贡献情况,即由贡献决定分数. 另外保证一定的奖惩措施,充分调动组员的积极性,鞭策团队向前迈进. 对于团队贡献分数的 ...
- AloneQIan---第一次作业
小学生的噩梦 一.估计与实际 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 600 720 • Estim ...
- vim搭建C编程IDE
曾经在一篇关于vim技巧的文章里有一句话:"世界上只有三种编辑器,EMACS.VIM和其它." 我不知道这是不是太过于绝对了,但是从我所看到的每一篇linux下编程以及文字编辑的文 ...