day20 文件输入流和输出流FileInputStream FileOutputStream

1.概念
 IO流用来处理设备之间的数据传输
 Java对数据的操作是通过流的方式
 Java用于操作流的类都在IO包中
 流按流向分为两种:输入流,输出流。
 流按操作类型分为两种:
 字节流 : 字节流可以操作任何数据,因为在计算机中任何数据都是以字节的形式存储的
 字符流 : 字符流只能操作纯字符数据,比较方便。
 2.IO流常用父类
 字节流的抽象父类:
 InputStream OutputStream
 字符流的抽象父类:
 Reader Writer

IO流(FileInputStream)
read()一次读取一个字节
FileInputStream fis = new FileInputStream("xxx.txt"); //创建流对象
int b;
while((b = fis.read()) != -1) {
System.out.println(b);
}

fis.close();

打印结果为:
ASCII
经常忘记关闭流,佩服我自己

IO流(FileOutputStream)
write()一次写出一个字节

FileOutputStream fos = new FileOutputStream("bbb.txt"); //如果没有bbb.txt,会创建出一个
fos.write(97);
fos.write(98);
fos.write(99);
fos.close();
打印结果为:
abc

20.05_IO流(FileOutputStream追加)
在FileOutputStream fos = new FileOutputStream("bbb.txt",true);这里加上true就好了,要不然平时都是写一次存新内容。

20.06_IO流(拷贝图片)
FileInputStream读取
FileOutputStream写出

FileInputStream fis = new FileInputStream("致青春.mp3");//创建输入流对象,关联致青春.mp3
FileOutputStream fos = new FileOutputStream("copy.mp3");//创建输出流对象,关联copy.mp3
int b;
while((b = fis.read()) != -1) {
fos.write(b);
}

fis.close();
fos.close();

20.09_IO流(定义小数组)
write(byte[] b)
write(byte[] b, int off, int len)写出有效的字节个数
案例演示
FileInputStream fis = new FileInputStream("致青春.mp3");
FileOutputStream fos = new FileOutputStream("copy.mp3");
int len;
byte[] arr = new byte[1024 * 8]; //自定义字节数组

while((len = fis.read(arr)) != -1) {
//fos.write(arr);
fos.write(arr, 0, len); //写出字节数组写出有效个字节个数
}

fis.close();
fos.close();

20.11_IO流(BufferedInputStream和BufferOutputStream拷贝)
A:缓冲思想
* 字节流一次读写一个数组的速度明显比一次读写一个字节的速度快很多,
* 这是加入了数组这样的缓冲区效果,java本身在设计的时候,
* 也考虑到了这样的设计思想(装饰设计模式后面讲解),所以提供了字节缓冲区流
B.BufferedInputStream
* BufferedInputStream内置了一个缓冲区(数组)
* 从BufferedInputStream中读取一个字节时
* BufferedInputStream会一次性从文件中读取8192个, 存在缓冲区中, 返回给程序一个
* 程序再次读取时, 就不用找文件了, 直接从缓冲区中获取
* 直到缓冲区中所有的都被使用过, 才重新从文件中读取8192个
C.BufferedOutputStream
* BufferedOutputStream也内置了一个缓冲区(数组)
* 程序向流中写出字节时, 不会直接写到文件, 先写到缓冲区中
* 直到缓冲区写满, BufferedOutputStream才会把缓冲区中的数据一次性写到文件里

代码的拷贝:
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("致青春.mp3"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("copy.mp3"));

int b;
while((b = bis.read()) != -1) {
bos.write(b);
}
bis.close();
bos.close();

20.12_IO流(flush和close方法的区别)
* flush()方法
* 用来刷新缓冲区的,刷新后可以再次写出
* close()方法
* 用来关闭流释放资源的的,如果是带缓冲区的流对象的close()方法,不但会关闭流,还会再关闭流之前刷新缓冲区,关闭后不能再写出。

20.13_IO流(字节流读写中文)
* 字节流读取中文的问题
* 字节流在读中文的时候有可能会读到半个中文,造成乱码
* 字节流写出中文的问题
* 字节流直接操作的字节,所以写出中文必须将字符串转换成字节数组
* 写出回车换行 write("\r\n".getBytes());
代码拷贝:
FileOutputStream fos = new FileOutputStream("zzz.txt");
fos.write("我读书少,你不要骗我".getBytes()); 字节流写的时候要转换字符串
fos.write("\r\n".getBytes());
fos.close();

20.14_IO流(流的标准处理异常代码1.6版本及其以前)
* try finally嵌套

FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream("aaa.txt");
fos = new FileOutputStream("bbb.txt");
int b;
while((b = fis.read()) != -1) {
fos.write(b);
}
} finally {
try {
if(fis != null)
fis.close();
}finally {
if(fos != null)
fos.close();
}
}

20.17_IO流(拷贝文件)
* 在控制台录入文件的路径,将文件拷贝到当前项目下

Scanner sc = new Scanner(System.in);
System.out.println("请输入一个文件路径");
String line = sc.nextLine(); //将键盘录入的文件路径存储在line中
File file = new File(line); //封装成File对象 (是不是也可理解成将File转换为String)
FileInputStream fis = new FileInputStream(file);
FileOutputStream fos = new FileOutputStream(file.getName());

int len;
byte[] arr = new byte[8192]; //定义缓冲区
while((len = fis.read(arr)) != -1) {
fos.write(arr,0,len);
}

fis.close();
fos.close();

时间: 2024-10-24 19:23:43

day20 文件输入流和输出流FileInputStream FileOutputStream的相关文章

File类--输入流和输出流

创建文件对象:可以是物理文件或目录,操作文件或目录的属性(路径.权限.日期和时间等) 通过流来读写文件,流是一组有序的数据序列,以先进先出方式发送信息的通道 很多的信息,都是通过文件来读取的,文件是数据源 对于程序来说,把文件读入到程序中,这是输入,把资料读出去是是输出. 在Java中流的分类: 按流向区分: 1.输出流---->OutputStream和Writer作为基类 2.输入流---->InputputStream和Reader作为基类 输入输出流是相对于计算机内存来说的 按照处理数

文件输入流 FileInputStream类 文件输出流FileOutputStream ---转载

转载自---http://blog.csdn.net/hguisu/article/details/7418161 111:文件输入流: FileInputStream可以使用read()方法一次读入一个字节,并以int类型返回,或者是使用read()方法时读入至一个byte数组,byte数组的元素有多少个,就读入多少个字节.在将整个文件读取完成或写入完毕的过程中,这么一个byte数组通常被当作缓冲区,因为这么一个byte数组通常扮演承接数据的中间角色. 作用:以文件作为数据输入源的数据流.或者

Java文件字节流和字符流FileInputStream,FileOutputStream,FileReader,FileWriter

一,文件输入流和文件输出流:FileInputStream,FileOutputStream FileInputStream可以使用read()方法一次读入一个字节,并以int类型返回,或者是使用read()方法时读入至一个byte数组,byte数组的元素有多少个,就读入多少个字节.在将整个文件读取完成或写入完毕的过程中,这么一个byte数组通常被当作缓冲区,因为这么一个byte数组通常扮演承接数据的中间角色. int read();int read(byte b[]);int read(byt

Java字节流:FileInputStream FileOutputStream

----------------------------------------------------------------------------------- FileInputStream 类声明:public class FileInputStream extends InputStream位于java.io包下官方对其说明: A FileInputStream obtains input bytes from a file in a file system. What files

Android学习第18天—— 面向对象测试, 对象输入流,输出流的使用

工作内容 面向对象测试 面向对象的自我梳理: 类 private(封装,能用的时候尽量用)[不可以用于修饰类] public protected (子类可用)[不能用于修饰类] 默认 成员变量,类变量(static) 成员方法,类方法(static)- static{ }最先执行,构造函数执行,static 返回类型 方法名(){ }需调用的时候才会执行 [类方法只能操作类变量] static修饰的属性和方法:属于类,最先拥有内存空间 构造方法:[修饰符] 类名 [同一个类中构造函数可以相互调用

FileInputStream&FileOutputStream

一.io基本知识: 1.什么是输入,输出 输入,输入在java中是以程序为中心的,将文件,网络,键盘上的数据输入到程序中,将程序中的数据输出到文件,网络或者屏幕上 总结:有数据进入到程序里面来,我们称之为输入流,如果我们程序中的数据输出到文件,网络,其他地方去,我们称之为输出流. 无论输入,还是输出,相对于java程序本身 2.IO的分法:1).输入流,输出流2).字节流(MP3二进制文件),字符流(文本文件)(不存在谁高级)3).节点流(普通的水管,直接对到数据源上),处理流(高级水管,对到节

输入流与输出流的理解

1.程序操作的数据都应该是在内存里面,内存是你操作的主对象,把数据从其他资源里面传送到内存里面,就是输入,反之,把数据从内存传送到其他资源,就是输出. (1)读文件 BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream("infilename"))); 不管你从磁盘读,从网络读,或者从键盘读,读到内存,就是InputStream. (2)写文件 BufferedWriter ou

Java:字节流和字符流(输入流和输出流)

本文内容: 什么是流 字节流 字符流 首发日期:2018-07-24 什么是流 流是个抽象的概念,是对输入输出设备的抽象,输入流可以看作一个输入通道,输出流可以看作一个输出通道. 输入流是相对程序而言的,外部传入数据给程序需要借助输入流. 输出流是相对程序而言的,程序把数据传输到外部需要借助输出流. 什么是字节流? 字节流--传输过程中,传输数据的最基本单位是字节的流. 什么是字符流? 字符流--传输过程中,传输数据的最基本单位是字符的流. 字符编码方式不同,有时候一个字符使用的字节数也不一样,

JAVA文件读写输入输出流关闭问题、JAVA垃圾回收

切记: 读写文件一定要及时关闭输入输出流 项目中,用到将rtf文档上传后修改一个更新标记为0未更新,另外一个程序将文档上传到LED屏上面,LED程序检测到更新标记为未更新时将状态投到LED上面,并将状态更新为1已更新. 现象:上传文件时使用输入输出流,上传成功后LED屏不显示更新文档,为空. 部分代码: public void save(){ upload(); save(XXXXX); } public void upload() throws Exception{ //以服务器的文件保存地址