【JavaSE基础】------IO流【一】


JavaSE基础IO流【一】

一、java.io.File类
     1.凡是与输入、输出相关的类、接口等都定义在java.io包下
     2.File是一个类,可以由构造器创建其对象,此对象对应者一个文件(.txt    .mp3    .mp4    .doc等等)或一个文件 目录
   3.File类对象是与平台无关的。(即也可以在其他平台使用)
    4.File类中的方法,仅涉及到如何创建、删除、重命名等等。只要涉及文件内容的,File是无能为力的,必须由IO来完成。
   5.File类的对象常作为IO流的集体类的构造器的形参。
    


         这里写图片描述
 二、IO流的概述
    1.流的分类
          按照数据流向不同:输入流,输出流
        按照处理数据的单位不同:字节流、字符流(处理纯文本文件)
        按照角色的不同:节点流(直接作用与文件)、处理流(在节点流的基础上加以处理)
    
 
    
    2.IO的体系
        抽象基类            节点流(文件流)          缓冲流(处理流的一种,可以提升文件操作的效率)       
        InputStream       FileInputStream            BufferedInputStream
        OutputStream    FileOutputStream         BufferedOutputStream    (flush() )
        Reader                FileReader                         BufferedReader        (readLine())
        Writer                  FileWriter                            BufferedWriter    (flush() )

         ①、FileInputStream 读取文件
           一个字节一个字节的读取(读取速度较慢,不推荐使用)
   
   
  1. private static void FileInputStreamTest() throws Exception {
  2. // TODO Auto-generated method stub
  3. File file1=new File("hello.txt");
  4. FileInputStream fis=new FileInputStream(file1);
  5. //调用FileInputStream的方法 实现file文件的读取
  6. /*
  7. read() 读取文件的一个字节,当执行到文件结尾时,返回-1.
  8. * int b = fis.read();
  9. while(b!=-1){
  10. System.out.print((char)b);
  11. b=fis.read();
  12. }
  13. */
  14. int b;
  15. while((b=fis.read())!=-1){
  16. System.out.print((char)b);
  17. }
  18. fis.close();
  19. }
               使用数组控制每次读取字节的长度,可同时读取多个字节 速度大大提升。
            
    
    
  1. private static void FileInputStreamTest(){
  2. FileInputStream fis=null;
  3. //调用FileInputStream的方法 实现file文件的读取
  4. try {
  5. // TODO Auto-generated method stub
  6. File file1 = new File("hello.txt");
  7. fis = new FileInputStream(file1);
  8. byte[] b = new byte[5]; //读取到的数据写到数组, 数组长度为同时读取的字节长度
  9. int len; //因为数组长度是固定的 这里要用len 来表示同一次读取到的字节长度 有可能并没有装满数组
  10. while ((len = fis.read(b)) != -1) {
  11. // for (int i = 0; i < len; i++) {
  12. // System.out.print((char) b[i]);
  13. // }
  14. String str=new String(b, 0, len);
  15. System.out.print( str);
  16. }
  17. } catch (Exception e) {
  18. // TODO: handle exception
  19. }finally{
  20. try {
  21. if(fis!=null){
  22. fis.close();
  23. }
  24. } catch (IOException e) {
  25. // TODO Auto-generated catch block
  26. e.printStackTrace();
  27. }
  28. }
  29. }
    
 
       ②
、FileOutputStream 写入文件
                    基本用法:

   
   
  1. private static void FileOutputStreamTest() {
  2. // TODO Auto-generated method stub
  3. //1.创建File对象 指定hello2.txt 文件的位置 ★该文件不存在时,系统自动创建。如果已存在且存在内容时 此方法写入会覆盖其内容。
  4. File file2=new File("hello2.txt");
  5. //2.创建FileOutputStream 对象 将File对象作为形参 传递给FileOutputStream的构造中
  6. FileOutputStream fos=null;
  7. try {
  8. fos=new FileOutputStream(file2);
  9. //3.写入操作
  10. fos.write(new String("hello world !").getBytes());
  11. } catch (IOException e) {
  12. // TODO Auto-generated catch block
  13. e.printStackTrace();
  14. }finally{
  15. //4.关闭流
  16. if(fos!=null){
  17. try {
  18. fos.close();
  19. } catch (IOException e) {
  20. // TODO Auto-generated catch block
  21. e.printStackTrace();
  22. }
  23. }
  24. }
  25. }
                    FileInputStream、File OutputStream 同时使用,实现从硬盘读取一个文件,并写入到另一个位置。(相当于文件的复制):

    
    
  1. private static void FileInputOutputStreamTest() {
  2. // TODO Auto-generated method stub
  3. //实现从硬盘读取一个文件,并写入到另一个位置。(相当于文件的复制):
  4. //1.准备要读取和要写入的文件
  5. File file1=new File("C:\Users\asusnb\Desktop\1.jpg"); //等会儿读取的文件 一定是存在的!!
  6. File file2=new File("C:\Users\asusnb\Desktop\2.jpg"); //作为写入的文件 可以是不存在的
  7. //2.准备相应的流
  8. FileInputStream fis=null;
  9. FileOutputStream fos=null;
  10. //3.实现文件的复制
  11. try{
  12. fis=new FileInputStream(file1);
  13. fos=new FileOutputStream(file2);
  14. //3.1 先从file1中 读取到文件的数据
  15. byte[] b=new byte[5];
  16. int len;
  17. while((len=fis.read(b))!=-1){
  18. //3.2 把file1中读取到的数据写入到file2中
  19. fos.write(b, 0, len);
  20. }
  21. }catch(Exception e){
  22. e.printStackTrace();
  23. }finally{
  24. //4.关闭流
  25. if(fis!=null){
  26. try {
  27. fis.close();
  28. } catch (IOException e) {
  29. // TODO Auto-generated catch block
  30. e.printStackTrace();
  31. }
  32. }
  33. if(fos!=null){
  34. try {
  35. fos.close();
  36. } catch (IOException e) {
  37. // TODO Auto-generated catch block
  38. e.printStackTrace();
  39. }
  40. }
  41. }
  42. }

③、FileReader读取文件
                跟上面的FileInputStream 几乎相同 不同的是 FileReader读取的是字符,而FileInputStream读取的是字节

     
     
  1. private static void FileReaderTest() {
  2. // TODO Auto-generated method stub
  3. //1.创建File对象 准备要读取的文件
  4. File file=new File("C:\Users\asusnb\Desktop\1.txt");
  5. //2.创建FileReader 对象 将要读取的文件放入FileReader
  6. FileReader reader=null;
  7. //3.通过FileReader 的read方法 读取文件
  8. try{
  9. reader=new FileReader(file);
  10. char c[]=new char[20]; //创建char数组 数组长度为一次同时读取的字符长度
  11. int len;
  12. while((len=reader.read(c))!=-1){
  13. String str=new String(c, 0, len);
  14. System.out.print(str);
  15. }
  16. }catch(Exception e){
  17. e.printStackTrace();
  18. }finally{
  19. if(reader!=null){
  20. try {
  21. reader.close();
  22. } catch (IOException e) {
  23. // TODO Auto-generated catch block
  24. e.printStackTrace();
  25. }
  26. }
  27. }
  28. }

、FileWriter  写入文件

        因为与上面的FileOutStream 相似 这里直接用了一个FileReader和FileWriter 结合的例子实现了字符流文件的复制

    
         
         
  1. private static void FileWriter() {
  2. // TODO Auto-generated method stub
  3. //注意 FileReader、FileWriter 只能读取和写入 字符流(文本文件),而FileInputStream、FileOutputStream 只能读取和写入 字节流(包括.mp3 视频等等)
  4. //使用FileReader 和 FileWriter 把一个文本文件从硬盘复制到另一个地方
  5. //1.准备要读取和写入的文件
  6. File file1=new File("C:\Users\asusnb\Desktop\1.txt"); //要读取的文件必须存在!!
  7. File file2=new File("C:\Users\asusnb\Desktop\2.txt"); //此时是不存在的,若存在则覆盖该文件(写入可以不存在)
  8. //2.准备相应的流
  9. FileReader reader=null;
  10. FileWriter writer=null;
  11. //3.实现复制
  12. try{
  13. reader=new FileReader(file1);
  14. writer=new FileWriter(file2);
  15. char c[]=new char[24];
  16. int len;
  17. while((len=reader.read(c))!=-1){
  18. writer.write(c, 0, len);
  19. }
  20. }catch(Exception e){
  21. e.printStackTrace();
  22. }finally{
  23. //4.关闭流
  24. if(reader!=null){
  25. try {
  26. reader.close();
  27. } catch (IOException e) {
  28. // TODO Auto-generated catch block
  29. e.printStackTrace();
  30. }
  31. }
  32. if(writer!=null){
  33. try {
  34. writer.close();
  35. } catch (IOException e) {
  36. // TODO Auto-generated catch block
  37. e.printStackTrace();
  38. }
  39. }
  40. }
  41. }


    

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值