黑马程序员java笔记之四-----IO流


   ----------------------android培训、java培训、期待与您交流! ---------------------


一、  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()

实例代码:

     public class Iotest
         {
            public static void main(String[] args) throws IOException
            {
                 method05();
            }
             public static void method05()
             {
                 File f1 = new File("c:\\Test.java");
                File f2 = new File("d:\\hahah.java");
                sop("rename:"+f2.renameTo(f1));
       }
              public static void method04()
             {
                 File f = new File("file.txt");
                 sop("path:"+f.getPath());
                 sop("abspath:"+f.getAbsolutePath());
                 sop("parent:"+f.getParent());
                //该方法返回的是绝对路径中的父目录。如果获取的是相对路径,返回null。
                //如果相对路径中有上一层目录那么该目录就是返回结果。
             }
             public static void method03()throws IOException
            {
                 File f = new File("d:\\java\\test.txt");
               //创建文件
                  f.createNewFile();
                 //创建目录
                 //f.mkdir();
                 //记住在判断文件对象是否是文件或者目的时,必须要先判断该文件对象封装的内容是否存在。
                 //通过exists判断。
                 sop("dir:"+f.isDirectory());
                 sop("file:"+f.isFile());
               //判断是否是绝对路径
                 sop(f.isAbsolute());
            }
            public static void method02()
             {
                 File f = new File("file.txt");
                File dir = new File("java\\test\\testme");
                     sop("mkdir:"+dir.mkdirs());
             }
                public static void method01()throws IOException
                      {
                        File f = new File("file.txt");
                      }
                //创建File对象
             public static void consMethod()
             {
                 //将a.txt封装成file对象。可以将已有的和为出现的文件或者文件夹封装成对象。
                 File f1 = new File("a.txt");
                 //指定目录下的文件
                 File f2 = new File("D:\\abc","b.txt");
                 File d = new File("D:\\abc");
                 File f3 = new File(d,"c.txt");
                 sop("f1:"+f1);
                 sop("f2:"+f2);
                 sop("f3:"+f3);
                 File f4 = new File("c:"+File.separator+"abc"+File.separator+"sss"+File.separator+"a.txt");
             }
           //方便打印对象
             public static void sop(Object obj)
             {
                 System.out.println(obj);
             }
         }


       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变为字符流。代码示例:
        
public class InputStreamReaderDemo{
       public static void main(String args[]) throws Exception{
             File f = new File("d:" + File.separator + "test.txt") ;    
             Reader reader = null ;
             reader = new InputStreamReader(new FileInputStream(f)) ;    // 将字节流变为字符流
             char c[] = new char[1024] ;
             int len = reader.read(c) ;    // 读取
             reader.close() ;    // 关闭
             System.out.println(new String(c,0,len)) ;
       }
}

public class OutputStreamWriterDemo01{
	public static void main(String args[]) throws Exception	{	// 所有异常抛出
		File f = new File("d:" + File.separator + "test.txt") ;	
		Writer out = null ;	// 字符输出流
		out = new OutputStreamWriter(new FileOutputStream(f)) ;	// 字节流变为字符流
		out.write("hello world!!") ;	// 使用字符流输出
		out.close() ;
	}
}
RandromAccessFile类:
         该类不算是IO体系中子类,而是继承自Object。但他是IO包中成员,因为它具备写和读的功能。
         内部封装了一个数组,而且通过指针对数组的元素进行操作。
         可以通过getFilePointer获取指针位置。
         同时可以通过seek改变指针的位置。
         其实完成读写的原理即使内部风转过了字节流和输入流
         主要操作方法:
         read()           从此文件中读取一个数据字节。
         readLine()       从此文件读取文本的下一行。
         close()         关闭此随机访问文件流并释放与该流关联的所有系统资源。
         readInt()         从此文件读取一个有符号的整数。
         write(byte[] b, int off, int len)           将 len 个字节从指定 byte 数组写入到此文件,并从偏移量 off 处开始。

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

         public class RandomAccessFileDemo{
                 public static void main(String args[]) throws Exception{
                 File f = new File("G:" + File.separator + "test.txt") ;  
                 RandomAccessFile rdf = null ;       
                 rdf = new RandomAccessFile(f,"r") ;// 以只读的方式打开文件
                 String name = null ;
                 int age = 0 ;
                 byte b[] = new byte[12] ;    
                 // 读取第二个人的信息,意味着要空出第一个人的信息
                 rdf.skipBytes(12) ;       
                 for(int i=0;i<b.length;i++){
                     b[i] = rdf.readByte() ; 
                }
                 name = new String(b) ;    // 将读取出来的byte数组变为字符串
                age = rdf.readInt() ; 
                System.out.println("第二个人的信息 --> 姓名:" + name + ";年龄:" + age) ;
                 rdf.seek(0) ;    
                 for(int i=0;i<b.length;i++){
                     b[i] = rdf.readByte() ;  
                 }
                 name = new String(b) ;    // 将读取出来的byte数组变为字符串
                 age = rdf.readInt() ; 
                 System.out.println("第一个人的信息 --> 姓名:" + name + ";年龄:" + age) ;
                rdf.skipBytes(12) ;   
                for(int i=0;i<b.length;i++){
                     b[i] = rdf.readByte() ;   
                 }
                 name = new String(b) ;    // 将读取出来的byte数组变为字符串
                 age = rdf.readInt() ;  
                System.out.println("第三个人的信息 --> 姓名:" + name + ";年龄:" + age) ;
                 rdf.close() ;                // 关闭
                }
              }





   ----------------------android培训、java培训、期待与您交流! ---------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值