zoukankan      html  css  js  c++  java
  • 黑马程序员java笔记之四IO流

    一、  File类

             1.用来将文件或或者文件夹封装成对象
             2.方便对文件与文件夹的属性进行操作(流只能操作数据)
             3.File对象可以作为参数传递给流的构造函数
             4.聊解File类中的常用方法
          
             File类常见方法:
             1,创建。
                boolean createNewFile():
              //在指定位置创建文件,如果该文件已经存在,则不创建,返回false。
              //和输出流不一样,输出流对象一建立创建文件。而且文件已经存在,会覆盖。

                boolean mkdir():创建文件夹。
                boolean mkdirs():创建多级文件夹。
             2,删除。
                 boolean delete():删除失败返回false。如果文件正在被使用,则删除不了返回falsel。
                 void deleteOnExit();在程序退出时删除指定文件。


             3,判断。
                boolean exists() :文件是否存在.
                isFile():
                isDirectory();
                isHidden();
                isAbsolute();

             4,获取信息。
                getName():
                getPath():
                getParent():
                getAbsolutePath() 

                long lastModified()

                long length()

    实例代码:

    1. <span style="font-size:18px;">     public class Iotest  
    2.          {  
    3.             public static void main(String[] args) throws IOException  
    4.             {  
    5.                  method05();  
    6.             }  
    7.              public static void method05()  
    8.              {  
    9.                  File f1 = new File("c:\\Test.java");  
    10.                 File f2 = new File("d:\\hahah.java");  
    11.                 sop("rename:"+f2.renameTo(f1));  
    12.        }  
    13.               public static void method04()  
    14.              {  
    15.                  File f = new File("file.txt");  
    16.                  sop("path:"+f.getPath());  
    17.                  sop("abspath:"+f.getAbsolutePath());  
    18.                  sop("parent:"+f.getParent());  
    19.                 //该方法返回的是绝对路径中的父目录。如果获取的是相对路径,返回null。  
    20.                 //如果相对路径中有上一层目录那么该目录就是返回结果。  
    21.              }  
    22.              public static void method03()throws IOException  
    23.             {  
    24.                  File f = new File("d:\\java\\test.txt");  
    25.                //创建文件  
    26.                   f.createNewFile();  
    27.                  //创建目录  
    28.                  //f.mkdir();  
    29.                  //记住在判断文件对象是否是文件或者目的时,必须要先判断该文件对象封装的内容是否存在。  
    30.                  //通过exists判断。  
    31.                  sop("dir:"+f.isDirectory());  
    32.                  sop("file:"+f.isFile());  
    33.                //判断是否是绝对路径  
    34.                  sop(f.isAbsolute());  
    35.             }  
    36.             public static void method02()  
    37.              {  
    38.                  File f = new File("file.txt");  
    39.                 File dir = new File("java\\test\\testme");  
    40.                      sop("mkdir:"+dir.mkdirs());  
    41.              }  
    42.                 public static void method01()throws IOException  
    43.                       {  
    44.                         File f = new File("file.txt");  
    45.                       }  
    46.                 //创建File对象  
    47.              public static void consMethod()  
    48.              {  
    49.                  //将a.txt封装成file对象。可以将已有的和为出现的文件或者文件夹封装成对象。  
    50.                  File f1 = new File("a.txt");  
    51.                  //指定目录下的文件  
    52.                  File f2 = new File("D:\\abc","b.txt");  
    53.                  File d = new File("D:\\abc");  
    54.                  File f3 = new File(d,"c.txt");  
    55.                  sop("f1:"+f1);  
    56.                  sop("f2:"+f2);  
    57.                  sop("f3:"+f3);  
    58.                  File f4 = new File("c:"+File.separator+"abc"+File.separator+"sss"+File.separator+"a.txt");  
    59.              }  
    60.            //方便打印对象  
    61.              public static void sop(Object obj)  
    62.              {  
    63.                  System.out.println(obj);  
    64.              }  
    65.          }</span>  

     

           IO包中的其他类:

              *打印流:
                PrintWriter与PrintStream
      
               可以直接操作输入流和文件
             *序列流
       
             sequenceInputStream
       
             对多个流进行合并
     
             *操作对象:
      
             ObjectInputSteam与ObjectOutputStream
       
             被操作的兑现更要实现Serealizable(标记接口)

               Serializalble接口:对象序列化即使把一个对象变为二进制的数据流的一种方法,通过对象实例化,可以方便地实现独享的传输或存储。

     

    转换流的字符编码:
             ASCII:美国标准洗洗交换表用一个字节的7位表示;
             ISO8859-1:拉丁码表。欧洲码表用一个字节的8位表示
             GB2312:中国的中文编码表。
             GBK:中国饿中文编码表升级,融合了更多的中文文字符号。
             Unicode:国际标准码,融合了多种文字,所有文字都用两个字节来表示,JAVA语言使用的就是UNICODE
             UTF_8:最多用三个字节来表示一个字符.

      字节流和字符流的转换:

             OutputStreamWriter:是Writer的子类,将输出的字符流变为字节流,即将一个字符流的输出对象变为字节流的输出对象。
             InputSttreamReader: 是Reader的子类, 将输入的字节流变为字符流,即将一个字节流的输入对象变为字符流的输入对象。
              如果以文件的操作为例,则内存中的字符流需要通过OutputStreamWriter变为字节流才能保存文件,读取时需要将读入的字节流通过InputSteamReader变为字符流。代码示例:
            

    1. <span style="font-size:18px;">public class InputStreamReaderDemo{  
    2.        public static void main(String args[]) throws Exception{  
    3.              File f = new File("d:" + File.separator + "test.txt") ;      
    4.              Reader reader = null ;  
    5.              reader = new InputStreamReader(new FileInputStream(f)) ;    // 将字节流变为字符流  
    6.              char c[] = new char[1024] ;  
    7.              int len = reader.read(c) ;    // 读取  
    8.              reader.close() ;    // 关闭  
    9.              System.out.println(new String(c,0,len)) ;  
    10.        }  
    11. }</span>  

     

    1. <span style="font-size:18px;">public class OutputStreamWriterDemo01{  
    2.     public static void main(String args[]) throws Exception {   // 所有异常抛出  
    3.         File f = new File("d:" + File.separator + "test.txt") ;   
    4.         Writer out = null ; // 字符输出流  
    5.         out = new OutputStreamWriter(new FileOutputStream(f)) ; // 字节流变为字符流  
    6.         out.write("hello world!!") ;    // 使用字符流输出  
    7.         out.close() ;  
    8.     }  
    9. }</span>  

    RandromAccessFile类:
             该类不算是IO体系中子类,而是继承自Object。但他是IO包中成员,因为它具备写和读的功能。
             内部封装了一个数组,而且通过指针对数组的元素进行操作。
             可以通过getFilePointer获取指针位置。
             同时可以通过seek改变指针的位置。
             其实完成读写的原理即使内部风转过了字节流和输入流
             主要操作方法:
             read()           从此文件中读取一个数据字节。
             readLine()       从此文件读取文本的下一行。
             close()         关闭此随机访问文件流并释放与该流关联的所有系统资源。
             readInt()         从此文件读取一个有符号的整数。
             write(byte[] b, int off, int len)           将 len 个字节从指定 byte 数组写入到此文件,并从偏移量 off 处开始。

             write(int b)            向此文件写入指定的字节。

    1. <span style="font-size:18px;">         public class RandomAccessFileDemo{  
    2.                  public static void main(String args[]) throws Exception{  
    3.                  File f = new File("G:" + File.separator + "test.txt") ;    
    4.                  RandomAccessFile rdf = null ;         
    5.                  rdf = new RandomAccessFile(f,"r") ;// 以只读的方式打开文件  
    6.                  String name = null ;  
    7.                  int age = 0 ;  
    8.                  byte b[] = new byte[12] ;      
    9.                  // 读取第二个人的信息,意味着要空出第一个人的信息  
    10.                  rdf.skipBytes(12) ;         
    11.                  for(int i=0;i<b.length;i++){  
    12.                      b[i] = rdf.readByte() ;   
    13.                 }  
    14.                  name = new String(b) ;    // 将读取出来的byte数组变为字符串  
    15.                 age = rdf.readInt() ;   
    16.                 System.out.println("第二个人的信息 --> 姓名:" + name + ";年龄:" + age) ;  
    17.                  rdf.seek(0) ;      
    18.                  for(int i=0;i<b.length;i++){  
    19.                      b[i] = rdf.readByte() ;    
    20.                  }  
    21.                  name = new String(b) ;    // 将读取出来的byte数组变为字符串  
    22.                  age = rdf.readInt() ;   
    23.                  System.out.println("第一个人的信息 --> 姓名:" + name + ";年龄:" + age) ;  
    24.                 rdf.skipBytes(12) ;     
    25.                 for(int i=0;i<b.length;i++){  
    26.                      b[i] = rdf.readByte() ;     
    27.                  }  
    28.                  name = new String(b) ;    // 将读取出来的byte数组变为字符串  
    29.                  age = rdf.readInt() ;    
    30.                 System.out.println("第三个人的信息 --> 姓名:" + name + ";年龄:" + age) ;  
    31.                  rdf.close() ;                // 关闭  
    32.                 }  
    33.               }</span>  

     

  • 相关阅读:
    MyBatis中传入参数parameterType类型详解
    mybatis逆向工程无法生成带有_表明的解决办法。
    sql server 正则匹配查询数据
    Kibana按时间(小时,分钟,天)统计数据 ,
    AutoCAD 多重引线 文本 左右对齐的问题
    ObjectARXWizard2022安装
    综合练习:词频统计
    powerDesigner设计表自动生成sql语句,设置携带注释
    打jar包后,无法获取resources目录下的word模板文件
    solr新建core,并配置schema
  • 原文地址:https://www.cnblogs.com/lixiaolun/p/2832734.html
Copyright © 2011-2022 走看看