• java---IO流:字节流


    字节流写数据
    1. package IO流.字节流.字节流写数据;
    2. import java.io.FileNotFoundException;
    3. import java.io.FileOutputStream;
    4. import java.io.IOException;
    5. /*
    6. 字节流抽象基类
    7. inputStream: 这个抽象类是表示字节输入流的所有类的超类
    8. outputStream: 这个抽象类表示字节输出流的所有类的超类
    9. 子类名特点: 子类名称都是以其父类名作为子类名的后缀
    10. FileOutputStream:文件输出流 用于将数据写入File
    11. FileOutputStream(String name): 创建文件输出流以指定的名写入文件
    12. 使用字节输出流写数据的步骤:
    13. 创建字节输出流对象
    14. 调用字节输出流对象的写数据方法
    15. 释放资源
    16. */
    17. public class 字节流写数据 {
    18. public static void main(String[] args) throws IOException {
    19. //创建字节输出流对象
    20. FileOutputStream fos=new FileOutputStream("idea_text\\fos.txt");
    21. /*
    22. 做了三件事情:
    23. 1,调用系统功能创建了文件
    24. 2,创建了字节输出流对象
    25. 3,让字节输出流对象指向创建好的文件
    26. */
    27. //void write​(int b) 将指定的字节写入此文件输出流。
    28. fos.write(97);
    29. // fos.write(57);
    30. // fos.write(55);
    31. //最后都要释放资源
    32. //void close​() 关闭此文件输出流并释放与此流相关联的任何系统资源
    33. fos.close();
    34. }
    35. }
    字节流写数据的3种方式
    1. package IO流.字节流.字节流写数据;
    2. /*
    3. void write​(int b)
    4. 将指定的字节写入此文件输出流。
    5. 一次写一个字节数据
    6. void write​(byte[] b)
    7. 将 b.length字节从指定的字节数组写入此文件输出流。
    8. 一次写一个字节数组数据
    9. void write​(byte[] b, int off, int len)
    10. 将 len字节从指定的字节数组开始,从偏移量 off开始写入此文件输出流。
    11. 一次写一个字节数组的部分数据
    12. */
    13. import java.io.File;
    14. import java.io.FileNotFoundException;
    15. import java.io.FileOutputStream;
    16. import java.io.IOException;
    17. public class 字节流写数据的3种方式 {
    18. public static void main(String[] args) throws IOException {
    19. //创建文件输出流以指定的名称写入文件
    20. FileOutputStream fos = new FileOutputStream("idea_text\\fos.txt");
    21. //new File(name)
    22. // FileOutputStream fos = new FileOutputStream(new File("idea_text\\fos.txt"));
    23. //创建文件输出流以写入由指定的File对象表示的文件
    24. // FileOutputStream(File file)
    25. // File file=new File("idea_text\\fos.txt");
    26. // FileOutputStream fos2 = new FileOutputStream(file);
    27. // FileOutputStream fos2 = new FileOutputStream(new File("idea_text\\fos.txt"));
    28. /* //void write​(int b)
    29. fos.write(97);
    30. fos.write(98);
    31. fos.write(99);
    32. fos.write(100);
    33. fos.write(101);*/
    34. //void write​(byte[] b)
    35. // byte[] bys={97,98,99,100,101};
    36. //byte[] getBytes() :返回字符串对应的字节数组
    37. byte[] bys ="abcde".getBytes();
    38. // fos.write(bys);
    39. //void write​(byte[] b, int off, int len)
    40. fos.write(bys,1,3);
    41. //释放资源
    42. fos.close();
    43. }
    44. }

    字节流写数据的两个小问题
    1. package IO流.字节流.字节流写数据;
    2. /*
    3. 1,字节流写数据如何实现换行呢?
    4. window:\r\n
    5. linux: \n
    6. mac: \r
    7. 2,字节流如何实现追加写入呢?
    8. public FileOutputStream (String name,boolean append)
    9. 创建文件输出流以指定的名称写入文件
    10. 如果第二个参数为ture,则字节将写入文件的末尾而不是开头
    11. */
    12. import java.io.FileNotFoundException;
    13. import java.io.FileOutputStream;
    14. import java.io.IOException;
    15. public class 字节流写数据的两个小问题 {
    16. public static void main(String[] args) throws IOException {
    17. //创建字节输出流对象
    18. //追加写入
    19. FileOutputStream fos=new FileOutputStream("idea_text\\fos.txt",true);
    20. //写数据
    21. for (int i=0;i<10;i++){
    22. fos.write("hello".getBytes());
    23. fos.write("\r\n".getBytes());//换行
    24. }
    25. //释放资源
    26. fos.close();
    27. }
    28. }
    字节流写数据加异常处理
    1. package IO流.字节流.字节流写数据;
    2. /*
    3. finally:
    4. 在异常处理时提供finally块来执行所有的清除操作。
    5. 特点:
    6. 被finally控制的语句一定会执行,除非JVM退出
    7. */
    8. import java.io.FileNotFoundException;
    9. import java.io.FileOutputStream;
    10. import java.io.IOException;
    11. public class 字节流写数据加异常处理 {
    12. public static void main(String[] args){
    13. //加finally来释放资源
    14. FileOutputStream fos = null;
    15. try{
    16. fos=new FileOutputStream("idea_text\\fos.txt");
    17. fos.write("hello".getBytes());
    18. }catch(IOException e){
    19. e.printStackTrace();
    20. }
    21. finally{
    22. if (fos!=null){
    23. try{
    24. fos.close();
    25. }catch(IOException e){
    26. e.printStackTrace();
    27. }
    28. }
    29. }
    30. }
    31. }
     
    

    字节流读数据:

    一次读一个字节数据

    1. package IO流.字节流.字节流读数据.一次读一个字节数据;
    2. /*
    3. 字节流读数据:
    4. 需求:
    5. 把文件fos.txt中的内容读取出来在控制台输出
    6. FileInputStream从文件系统中的文件获取输入字节。
    7. FileInputStream​(String name)
    8. 通过打开与实际文件的连接来创建一个 FileInputStream ,
    9. 该文件由文件系统中的路径名 name命名。
    10. 使用字节输入流读数据的步骤:
    11. 1,创建字节输入流对象
    12. 2,调用字节输入流对象的读取数据方法
    13. 3,释放资源
    14. */
    15. import java.io.FileInputStream;
    16. import java.io.IOException;
    17. public class 一次读一个字节数据 {
    18. public static void main(String[] args) throws IOException {
    19. //创建字节输入流对象
    20. //FileInputStream​(String name)
    21. FileInputStream fis=new FileInputStream("idea_text\\fos.txt");
    22. //调用字节输入流对象的读取数据
    23. int by;
    24. /*
    25. fis.read():读数据
    26. by=fis.read():把读取的数据赋值给by
    27. by !=-1 :判断读取的数据是否为-1
    28. */
    29. while ((by = fis.read()) != -1){
    30. System.out.println((char)by);
    31. }
    32. //释放资源
    33. fis.close();
    34. }
    35. }

     

     

    复制文本文件
    1. package IO流.字节流.字节流读数据.一次读一个字节数据;
    2. import java.io.FileInputStream;
    3. import java.io.FileNotFoundException;
    4. import java.io.FileOutputStream;
    5. import java.io.IOException;
    6. /*
    7. 需求:
    8. 把“D:\\1\\java\\窗里窗外.txt”复制到模块目录下的“窗里窗外.txt”
    9. 分析:
    10. 1,复制文本文件,其实就把文本文件的内容从一个文件中读取出来(数据源)
    11. 然后写入另一个文件中(目的地)
    12. 2,数据源:
    13. D:\\1\\java\\窗里窗外.txt---读数据---InputSteam---FileInputStream
    14. 3,目的地
    15. idea_text\\窗里窗外.txt---写数据---OutputStream---FileOutputStream
    16. */
    17. public class 复制文本文件 {
    18. public static void main(String[] args) throws IOException {
    19. //根据数据源创建字节输入流对象
    20. FileInputStream fis=new FileInputStream("D:\\1\\java\\窗里窗外.txt");
    21. //根据目的地创建字节输出流对象
    22. FileOutputStream fos=new FileOutputStream("idea_text\\窗里窗外.txt");
    23. //读取数据(一次读取一个字节)
    24. int by;
    25. while ((by=fis.read())!=-1){
    26. fos.write(by);
    27. }
    28. //释放资源
    29. fis.close();
    30. fos.close();
    31. }
    32. }
    一次读一个字节数组数据
    1. package IO流.字节流.字节流读数据.一次读一个字节数组数据;
    2. import java.io.FileInputStream;
    3. import java.io.FileNotFoundException;
    4. import java.io.IOException;
    5. /*
    6. 字节流读数据:
    7. 需求:
    8. 把文件fos.txt中的内容读取出来在控制台输出
    9. 使用字节输入流读数据的步骤:
    10. 1,创建字节输入流对象
    11. 2,调用字节输入流对象的读取数据方法
    12. 3,释放资源
    13. */
    14. public class Demo {
    15. public static void main(String[] args) throws IOException {
    16. //创建字节输入流对象
    17. FileInputStream fis=new FileInputStream("idea_text\\fos.txt");
    18. //调用字节输入流对象的读取数据方法
    19. //int read​(byte[] b) 从该输入流读取最多 b.length个字节的数据到一个字节数组。
    20. /*
    21. byte[] bys=new byte[5];
    22. //第一次读数据
    23. int len = fis.read(bys);
    24. System.out.println(len);
    25. //String (byte[] bytes)
    26. System.out.println(new String(bys));
    27. //第二次读数据
    28. len = fis.read(bys);
    29. System.out.println(len);
    30. //String (byte[] bytes)
    31. System.out.println(new String(bys));
    32. //第三次读数据
    33. len = fis.read(bys);
    34. System.out.println(len);
    35. //String (byte[] bytes)
    36. System.out.println(new String(bys));
    37. */
    38. /*
    39. hello\r\n
    40. world\r\n
    41. *//*
    42. */
    43. /*
    44. 第一次:hello
    45. 第二次:\r\nwor
    46. 第三次:ld\r\nr
    47. *//*
    48. */
    49. //代码优化:
    50. byte[] bys =new byte[1024];
    51. int len;
    52. while ((len = fis.read(bys)) != -1){
    53. System.out.println(new String(bys,0,len));
    54. }
    55. //释放资源
    56. fis.close();
    57. }
    58. }

     

     

    复制图片
    1. package IO流.字节流.字节流读数据.一次读一个字节数组数据;
    2. import java.io.FileInputStream;
    3. import java.io.FileNotFoundException;
    4. import java.io.FileOutputStream;
    5. import java.io.IOException;
    6. /*
    7. 需求:
    8. 把“D:\\1\\1.jpg”复制到模块目录下的“1.jpg”
    9. 思路:
    10. 1,根据数据源创建字节输入流对象
    11. 2,根据目的地创建字节输出流对象
    12. 3,读写数据,复制图片(一次读取一个字节数组,一次写入一个字节数组)
    13. 4,释放资源
    14. */
    15. public class 复制图片 {
    16. public static void main(String[] args) throws IOException {
    17. //根据数据源创建字节输入流对象
    18. FileInputStream fis = new FileInputStream("D:\\1\\1.jpg");
    19. //根据目的地创建字节输出流对象
    20. FileOutputStream fos=new FileOutputStream("idea_text\\1.jpg");
    21. //读写数据
    22. byte[] bys=new byte[1024];
    23. int len;
    24. while((len=fis.read(bys))!=-1){
    25. fos.write(bys,0,len);
    26. }
    27. //释放资源
    28. fis.close();
    29. fos.close();
    30. }
    31. }
    字节缓冲流
    1. package IO流.字节流.字节缓冲流;
    2. /*
    3. 1, BufferOutputStream:该类实现缓冲输出流。
    4. 通过设置这样的输出流,应用程序可以向底层输出流写入字节,而不必为写入的每个字节导致底层系统的调用
    5. 2, BufferedInputStream:创建BufferedInputStream将创建一个内部缓冲区数组。
    6. 当从流中读取或跳过字节时,内部缓冲区将根据需要从所包含的输入流中重新填充,一次很多字节
    7. 构造方法:
    8. 字节缓冲输出流:BufferedOutputStream(OutputStreamout)
    9. 字节缓冲输入流:BufferedInputStream(InputStreamin)
    10. 为什么构造方法需要的是字节流,而不是具体的文件或者路径呢?
    11. ●字节缓冲流仅仅提供缓冲区,而真正的读写数据还得依靠基本的字节流对象进行操作
    12. */
    13. import java.io.*;
    14. public class Demo {
    15. public static void main(String[] args) throws IOException {
    16. /*
    17. //字节缓冲输出流:BufferedOutputStream(OutputStreamout)
    18. BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("idea_text\\bos.txt"));
    19. //写数据
    20. bos.write("hello\r\n".getBytes());
    21. bos.write("world\r\n".getBytes());
    22. //释放资源
    23. bos.close();
    24. */
    25. //字节缓冲输入流:BufferedInputStream(InputStreamin)
    26. BufferedInputStream bis = new BufferedInputStream(new FileInputStream("idea_text\\bos.txt"));
    27. //一次读取一个字节数据
    28. // int by;
    29. // while((by=bos.read())!=-1){
    30. // System.out.println((char)by);
    31. // }
    32. //一次读取一个字节数组数据
    33. byte[] bys=new byte[1024];
    34. int len;
    35. while((len=bis.read())!=-1){
    36. System.out.println(new String(bys,0,len));
    37. }
    38. //释放资源
    39. bis.close();
    40. }
    41. }
    复制视频
    1. package IO流.字节流.字节缓冲流;
    2. /*
    3. 需求:
    4. 把“D:\\1\\字节流复制视频.avi”复制到模块目录下的“idea_text\\字节流复制视频.avi”
    5. 思路:
    6. 1,根据数据源创建字节输入流对象
    7. 2,根据目的地创建字节输出流对象
    8. 3,读写数据,复制视频
    9. 4,释放资源
    10. */
    11. import java.io.*;
    12. public class 复制视频 {
    13. public static void main(String[] args) throws IOException{
    14. //记录开始时间
    15. long startTime = System.currentTimeMillis();
    16. //复制视频
    17. method1();
    18. //记录结束时间
    19. long endTime = System.currentTimeMillis();
    20. System.out.println("共耗时:"+(endTime-startTime)+"毫秒");
    21. }
    22. public static void method1() throws IOException {
    23. //根据数据源创建字节输入流对象
    24. BufferedInputStream bis=new BufferedInputStream(new FileInputStream("D:\\1\\字节流复制视频.avi"));
    25. //根据目的地创建字节输出流对象
    26. BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("idea_text\\字节流复制视频.avi"));
    27. //读写数据,复制视频
    28. //一次读写一个字节
    29. int by;
    30. while ((by = bis.read()) != -1){
    31. bos.write(by);
    32. }
    33. //一次读写以个字节数组数据
    34. //耗时更少,推荐使用
    35. byte[] bys=new byte[1024];
    36. int len;
    37. while ((len = bis.read())!=-1){
    38. bos.write(bys,0,len);
    39. }
    40. //释放资源
    41. bis.close();
    42. bos.close();
    43. }
    44. }

  • 相关阅读:
    商品价格区间筛选
    Java~JUC包
    随机化在计算机中的应用:查找和搜索以及信息加密
    python 小案例76
    筑牢安全生产防线,工厂人员定位报警系统护航企业发展
    ChartDirector 7.1.0 for VB Crack
    python--列表应用
    可解释的图像分类,提高组织表征的可信度论文速读
    UDP通信
    小学生C++趣味编程 视频集
  • 原文地址:https://blog.csdn.net/z2021_000000/article/details/125525145