
字节流写数据
- package IO流.字节流.字节流写数据;
-
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
-
- /*
- 字节流抽象基类
- inputStream: 这个抽象类是表示字节输入流的所有类的超类
- outputStream: 这个抽象类表示字节输出流的所有类的超类
- 子类名特点: 子类名称都是以其父类名作为子类名的后缀
- FileOutputStream:文件输出流 用于将数据写入File
- FileOutputStream(String name): 创建文件输出流以指定的名写入文件
- 使用字节输出流写数据的步骤:
- 创建字节输出流对象
- 调用字节输出流对象的写数据方法
- 释放资源
- */
- public class 字节流写数据 {
- public static void main(String[] args) throws IOException {
- //创建字节输出流对象
- FileOutputStream fos=new FileOutputStream("idea_text\\fos.txt");
- /*
- 做了三件事情:
- 1,调用系统功能创建了文件
- 2,创建了字节输出流对象
- 3,让字节输出流对象指向创建好的文件
- */
-
- //void write(int b) 将指定的字节写入此文件输出流。
- fos.write(97);
- // fos.write(57);
- // fos.write(55);
-
- //最后都要释放资源
- //void close() 关闭此文件输出流并释放与此流相关联的任何系统资源
- fos.close();
-
-
- }
- }
字节流写数据的3种方式
- package IO流.字节流.字节流写数据;
- /*
- void write(int b)
- 将指定的字节写入此文件输出流。
- 一次写一个字节数据
- void write(byte[] b)
- 将 b.length字节从指定的字节数组写入此文件输出流。
- 一次写一个字节数组数据
- void write(byte[] b, int off, int len)
- 将 len字节从指定的字节数组开始,从偏移量 off开始写入此文件输出流。
- 一次写一个字节数组的部分数据
- */
-
- import java.io.File;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
-
- public class 字节流写数据的3种方式 {
- public static void main(String[] args) throws IOException {
- //创建文件输出流以指定的名称写入文件
- FileOutputStream fos = new FileOutputStream("idea_text\\fos.txt");
- //new File(name)
- // FileOutputStream fos = new FileOutputStream(new File("idea_text\\fos.txt"));
-
- //创建文件输出流以写入由指定的File对象表示的文件
- // FileOutputStream(File file)
- // File file=new File("idea_text\\fos.txt");
- // FileOutputStream fos2 = new FileOutputStream(file);
- // FileOutputStream fos2 = new FileOutputStream(new File("idea_text\\fos.txt"));
-
- /* //void write(int b)
- fos.write(97);
- fos.write(98);
- fos.write(99);
- fos.write(100);
- fos.write(101);*/
-
- //void write(byte[] b)
- // byte[] bys={97,98,99,100,101};
- //byte[] getBytes() :返回字符串对应的字节数组
- byte[] bys ="abcde".getBytes();
- // fos.write(bys);
-
- //void write(byte[] b, int off, int len)
- fos.write(bys,1,3);
-
- //释放资源
- fos.close();
-
-
-
-
-
-
- }
- }
字节流写数据的两个小问题
- package IO流.字节流.字节流写数据;
- /*
- 1,字节流写数据如何实现换行呢?
- window:\r\n
- linux: \n
- mac: \r
- 2,字节流如何实现追加写入呢?
- public FileOutputStream (String name,boolean append)
- 创建文件输出流以指定的名称写入文件
- 如果第二个参数为ture,则字节将写入文件的末尾而不是开头
- */
-
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
-
- public class 字节流写数据的两个小问题 {
- public static void main(String[] args) throws IOException {
- //创建字节输出流对象
- //追加写入
- FileOutputStream fos=new FileOutputStream("idea_text\\fos.txt",true);
-
- //写数据
- for (int i=0;i<10;i++){
- fos.write("hello".getBytes());
- fos.write("\r\n".getBytes());//换行
- }
-
- //释放资源
- fos.close();
- }
- }
字节流写数据加异常处理
- package IO流.字节流.字节流写数据;
- /*
- finally:
- 在异常处理时提供finally块来执行所有的清除操作。
- 特点:
- 被finally控制的语句一定会执行,除非JVM退出
- */
-
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
-
- public class 字节流写数据加异常处理 {
- public static void main(String[] args){
-
- //加finally来释放资源
- FileOutputStream fos = null;
- try{
- fos=new FileOutputStream("idea_text\\fos.txt");
- fos.write("hello".getBytes());
- }catch(IOException e){
- e.printStackTrace();
- }
- finally{
- if (fos!=null){
- try{
- fos.close();
- }catch(IOException e){
- e.printStackTrace();
- }
- }
-
- }
- }
- }
字节流读数据:
一次读一个字节数据
- package IO流.字节流.字节流读数据.一次读一个字节数据;
- /*
- 字节流读数据:
- 需求:
- 把文件fos.txt中的内容读取出来在控制台输出
- FileInputStream从文件系统中的文件获取输入字节。
- FileInputStream(String name)
- 通过打开与实际文件的连接来创建一个 FileInputStream ,
- 该文件由文件系统中的路径名 name命名。
- 使用字节输入流读数据的步骤:
- 1,创建字节输入流对象
- 2,调用字节输入流对象的读取数据方法
- 3,释放资源
- */
-
- import java.io.FileInputStream;
-
- import java.io.IOException;
-
- public class 一次读一个字节数据 {
- public static void main(String[] args) throws IOException {
- //创建字节输入流对象
- //FileInputStream(String name)
- FileInputStream fis=new FileInputStream("idea_text\\fos.txt");
-
- //调用字节输入流对象的读取数据
- int by;
- /*
- fis.read():读数据
- by=fis.read():把读取的数据赋值给by
- by !=-1 :判断读取的数据是否为-1
- */
- while ((by = fis.read()) != -1){
- System.out.println((char)by);
- }
-
- //释放资源
- fis.close();
- }
-
- }

复制文本文件
- package IO流.字节流.字节流读数据.一次读一个字节数据;
-
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
-
- /*
- 需求:
- 把“D:\\1\\java\\窗里窗外.txt”复制到模块目录下的“窗里窗外.txt”
- 分析:
- 1,复制文本文件,其实就把文本文件的内容从一个文件中读取出来(数据源)
- 然后写入另一个文件中(目的地)
- 2,数据源:
- D:\\1\\java\\窗里窗外.txt---读数据---InputSteam---FileInputStream
- 3,目的地
- idea_text\\窗里窗外.txt---写数据---OutputStream---FileOutputStream
- */
- public class 复制文本文件 {
- public static void main(String[] args) throws IOException {
- //根据数据源创建字节输入流对象
- FileInputStream fis=new FileInputStream("D:\\1\\java\\窗里窗外.txt");
-
- //根据目的地创建字节输出流对象
- FileOutputStream fos=new FileOutputStream("idea_text\\窗里窗外.txt");
-
- //读取数据(一次读取一个字节)
- int by;
- while ((by=fis.read())!=-1){
- fos.write(by);
- }
-
-
- //释放资源
- fis.close();
- fos.close();
-
- }
- }
一次读一个字节数组数据
- package IO流.字节流.字节流读数据.一次读一个字节数组数据;
-
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.IOException;
-
- /*
- 字节流读数据:
- 需求:
- 把文件fos.txt中的内容读取出来在控制台输出
- 使用字节输入流读数据的步骤:
- 1,创建字节输入流对象
- 2,调用字节输入流对象的读取数据方法
- 3,释放资源
- */
- public class Demo {
- public static void main(String[] args) throws IOException {
- //创建字节输入流对象
- FileInputStream fis=new FileInputStream("idea_text\\fos.txt");
-
- //调用字节输入流对象的读取数据方法
- //int read(byte[] b) 从该输入流读取最多 b.length个字节的数据到一个字节数组。
- /*
- byte[] bys=new byte[5];
- //第一次读数据
- int len = fis.read(bys);
- System.out.println(len);
- //String (byte[] bytes)
- System.out.println(new String(bys));
- //第二次读数据
- len = fis.read(bys);
- System.out.println(len);
- //String (byte[] bytes)
- System.out.println(new String(bys));
- //第三次读数据
- len = fis.read(bys);
- System.out.println(len);
- //String (byte[] bytes)
- System.out.println(new String(bys));
- */
- /*
- hello\r\n
- world\r\n
- *//*
- */
- /*
- 第一次:hello
- 第二次:\r\nwor
- 第三次:ld\r\nr
- *//*
- */
-
- //代码优化:
- byte[] bys =new byte[1024];
- int len;
- while ((len = fis.read(bys)) != -1){
- System.out.println(new String(bys,0,len));
- }
-
- //释放资源
- fis.close();
-
-
- }
- }
复制图片
- package IO流.字节流.字节流读数据.一次读一个字节数组数据;
-
-
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
-
-
- /*
- 需求:
- 把“D:\\1\\1.jpg”复制到模块目录下的“1.jpg”
- 思路:
- 1,根据数据源创建字节输入流对象
- 2,根据目的地创建字节输出流对象
- 3,读写数据,复制图片(一次读取一个字节数组,一次写入一个字节数组)
- 4,释放资源
- */
- public class 复制图片 {
- public static void main(String[] args) throws IOException {
- //根据数据源创建字节输入流对象
- FileInputStream fis = new FileInputStream("D:\\1\\1.jpg");
- //根据目的地创建字节输出流对象
- FileOutputStream fos=new FileOutputStream("idea_text\\1.jpg");
-
- //读写数据
- byte[] bys=new byte[1024];
- int len;
- while((len=fis.read(bys))!=-1){
- fos.write(bys,0,len);
- }
-
- //释放资源
- fis.close();
- fos.close();
-
- }
- }
字节缓冲流
- package IO流.字节流.字节缓冲流;
- /*
- 1, BufferOutputStream:该类实现缓冲输出流。
- 通过设置这样的输出流,应用程序可以向底层输出流写入字节,而不必为写入的每个字节导致底层系统的调用
- 2, BufferedInputStream:创建BufferedInputStream将创建一个内部缓冲区数组。
- 当从流中读取或跳过字节时,内部缓冲区将根据需要从所包含的输入流中重新填充,一次很多字节
- 构造方法:
- 字节缓冲输出流:BufferedOutputStream(OutputStreamout)
- 字节缓冲输入流:BufferedInputStream(InputStreamin)
- 为什么构造方法需要的是字节流,而不是具体的文件或者路径呢?
- ●字节缓冲流仅仅提供缓冲区,而真正的读写数据还得依靠基本的字节流对象进行操作
- */
-
- import java.io.*;
-
- public class Demo {
- public static void main(String[] args) throws IOException {
- /*
- //字节缓冲输出流:BufferedOutputStream(OutputStreamout)
- BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("idea_text\\bos.txt"));
- //写数据
- bos.write("hello\r\n".getBytes());
- bos.write("world\r\n".getBytes());
- //释放资源
- bos.close();
- */
-
- //字节缓冲输入流:BufferedInputStream(InputStreamin)
- BufferedInputStream bis = new BufferedInputStream(new FileInputStream("idea_text\\bos.txt"));
-
- //一次读取一个字节数据
- // int by;
- // while((by=bos.read())!=-1){
- // System.out.println((char)by);
- // }
-
- //一次读取一个字节数组数据
- byte[] bys=new byte[1024];
- int len;
- while((len=bis.read())!=-1){
- System.out.println(new String(bys,0,len));
- }
-
- //释放资源
- bis.close();
- }
- }
复制视频
- package IO流.字节流.字节缓冲流;
- /*
- 需求:
- 把“D:\\1\\字节流复制视频.avi”复制到模块目录下的“idea_text\\字节流复制视频.avi”
- 思路:
- 1,根据数据源创建字节输入流对象
- 2,根据目的地创建字节输出流对象
- 3,读写数据,复制视频
- 4,释放资源
- */
-
- import java.io.*;
-
- public class 复制视频 {
- public static void main(String[] args) throws IOException{
- //记录开始时间
- long startTime = System.currentTimeMillis();
-
- //复制视频
- method1();
-
- //记录结束时间
- long endTime = System.currentTimeMillis();
- System.out.println("共耗时:"+(endTime-startTime)+"毫秒");
-
- }
- public static void method1() throws IOException {
- //根据数据源创建字节输入流对象
- BufferedInputStream bis=new BufferedInputStream(new FileInputStream("D:\\1\\字节流复制视频.avi"));
- //根据目的地创建字节输出流对象
- BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("idea_text\\字节流复制视频.avi"));
-
- //读写数据,复制视频
-
- //一次读写一个字节
- int by;
- while ((by = bis.read()) != -1){
- bos.write(by);
- }
-
- //一次读写以个字节数组数据
- //耗时更少,推荐使用
- byte[] bys=new byte[1024];
- int len;
- while ((len = bis.read())!=-1){
- bos.write(bys,0,len);
- }
-
- //释放资源
- bis.close();
- bos.close();
- }
- }