zoukankan      html  css  js  c++  java
  • Java第十章IO

    十、IO

     

    File类 

     

    java.io.File类
    1.凡是与输入、输出相关的类、接口等都定义在java.io包下
    2.File是一个类,可以有构造器创建其对象。此对象对应着一个文件或文件目录
    3.File类对象是与平台无关的
    4.File中的方法,仅涉及到如何创建、删除、重命名等等,只要涉及文件内容的,File无能为力。必须有IO流来完成
    5.File类的对象常作为IO流的具体类的构造器的形参。
    
    路径:
    绝对路径:包括盘符在内的完整的文件路径
    相对路径:在当前文件目录下的文件的路径

     

     

     

      File方法

     

    getName()//获取文件名
    getPath()//获取文件路径
    getAbsoluteFile()//获取绝对文件名
    getParent()//获取上一层的文件路径//相对路径时null
    getAbsolutePath()//获取绝对路径
    renameTo(File newName)//重命名
    file1.renameTo(file2)//file1重命名为file2.要求file文件一定存在,file2一定不存在
    
    exists()//文件存在
    canWrite()//文件可写
    canRead()//文件可读
    isFile()//是文件吗
    isDirectory()//是文件目录
    lastModfied()//最后修改时间
    length()//内容长度
    
    sysout(new Date(file1.lastModified()));
    
    createNewFile()
    delete()
    mkDir():创建一个文件目录,只有在上层文件目录存在的情况下,才能创建
    mkDirs():创建一个文件目录,若上层文件目录不存在,一并创建。
    list() :得到文件目录的内容,用字符串数组接收
    listFiles():得到文件目录的内容,用文件数组接收。

     

     

     

      IO的体系

     

      流

     

      FileInputStream

     

    //read()
    @Test
        public void test1(){
            
            FileInputStream fis =  null;
            try {
                File file1 = new File("g:/IO/hello2.txt");
                fis = new FileInputStream(file1);
                int b = fis.read();
                while(b!=-1){
                    System.out.print((char)b);
                    b = fis.read();
                }
            }  catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally{
                if(fis != null){
                    try {
                        fis.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                
            }
            
        }

    //read(byte[] byte)
        @Test
        public void test2(){
            FileInputStream fis = null;
            try {
                File file2 = new File("g:/IO/hello2.txt");
                 fis = new FileInputStream(file2);
                byte[] b = new byte[5];
                int len ;
                while((len = fis.read(b))!= -1){
                    for(int i= 0 ;i<len;i++){
                        
                    }
                    String str = new String(b,0,len);
                    System.out.print(str);
                }
                
            }  catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally{
                if(fis!=null){
                    try {
                        fis.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                
            }
            
        }

     

       FileOutputStream

       输出的物理文件可以不存在,当执行过程中,若不存在,会自动的创建,若存在,会将原有的文件覆盖

     

    @Test
        public void test3(){
            File file3 = new File("g:/IO/hello3.txt");
            FileOutputStream fos = null;
            try{
                fos = new FileOutputStream(file3);
                fos.write(new String("I love myself!").getBytes());
            }catch(Exception e){
                e.printStackTrace();
            }finally{
                if(fos!=null){
                    try {
                        fos.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
        }

     

     

      FileReaderFileWriter

       

        @Test 
        public void test5(){
            FileReader fr = null;
            FileWriter fw = null;
            try {
                File file1 = new File("C:\Users\dell\Desktop\新建文件夹\java基础.txt");
                File file2 = new File("C:\Users\dell\Desktop\新建文件夹\111.txt");
                fr = new FileReader(file1);
                fw = new FileWriter(file2);
                int len;
                char[] c = new char[1000];
                while((len=fr.read(c))!=-1){
                    fw.write(c, 0, len);
                }
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally{
                if(fr!=null){
                    try {
                            fr.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                if(fw!=null){
                    try {
                            fw.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
        
        }

     

       BufferedInputStream/BufferedOutputStream

    @Test
        public void test6(){
            FileInputStream fis = null;
            FileOutputStream fos = null;
            BufferedInputStream bis = null;
            BufferedOutputStream bos = null;
            try {
                File file1 = new File("D:\百度网盘下载\java\第10章:IO(day15-day16)\day15\day15_04IO流概述.wmv");
                File file2 = new File("D:\百度网盘下载\java\第10章:IO(day15-day16)\day15\1.wmv");
                fis = new FileInputStream(file1);
                fos = new FileOutputStream(file2);
                 bis = new BufferedInputStream(fis);
                 bos = new BufferedOutputStream(fos);
                int len;
                byte[] b = new byte[1024];
                while((len = bis.read(b))!= -1){
                    bos.write(b, 0, len);
                    bos.flush();
                }
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally{
                if(bis!= null){
                    try {
                        bis.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                if(bos!=null){
                    try {
                        bos.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
            
        }

     

     

      BufferedWriter/BufferedReader

     

    @Test
        public void test7(){
            BufferedWriter bw = null;
            BufferedReader br = null;
            try {
                File file1 = new File("");
                File file2 = new File("");
                FileReader fr = new FileReader(file1);
                FileWriter fw = new FileWriter(file2);
                br = new BufferedReader(fr);
                bw = new BufferedWriter(fw);
                String str;
                while((str = br.readLine())!= null){
                    bw.write(str);
                    bw.newLine();//换行
                    bw.flush();
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally{
                if(bw!=null){
                    try {
                        bw.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                if(br!=null){
                    try {
                        br.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
            
        }

     

     

     

     

      转换流:

        InputStreamReader / OutputStreamWriter(前提:数据是文本文件)

        

    /*如何实现字节流与字符流之间的转换:
         * 转换流:InputStreamReader  OutputStreamWriter
         * 编码:字符串 ---->字符数组
         * 解码:字符数组--->字符串
         */
        @Test
        public void test8(){
            BufferedReader br = null;
            BufferedWriter bw = null;
            try {
                File file1 = new File("");
                File file2 = new File("");
                FileInputStream fis = new FileInputStream(file1);
                FileOutputStream fos = new FileOutputStream(file2);
                InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
                OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
                br = new BufferedReader(isr);
                bw = new BufferedWriter(osw);
                String str;
                while((str = br.readLine())!=null){
                    bw.write(str);
                    bw.newLine();
                    bw.flush();
                }
            }  catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally{
                if(bw!=null){
                    try {
                        bw.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                if(br!=null){
                    try {
                        br.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
        }

     

      

     

      标准的输入输出流:

     
        标准的输出流:System.out
        标准的输入流:System.in

        str.toUpperCase();小写变大写

      

    注:使用FileReader、FileWriter 可以实现文本文件的复制
      对于非文本文件(视频文件、音频文件、图片),只能使用字节流

     

      打印流:

    打印流:字节流:PrintStream 字符流:PrintWriter
    //创建打印输出流,设置为自动刷新模式(写入换行符或字节'
    '时都会刷新输出缓存区)
        if(ps != null){//把标准输出流(控制台输出)改成文件
                System.setOut(ps);
            }

     

     

        数据流:

        数据流:用来处理基本数据类型、String、字节数组的数据:DataInputStream DataOutputStream

     

      对象流:

     

    要实现序列化的类:1.要求此类是可序列化的,实现Serializable接口
     2.要求类的属性同样的要实现Serializable接口
     3.提供一个版本号,private static fianl long serialVersionUID
     4.使用static 或 transient 修饰的属性,不可实现序列化
     
    
     对象的序列化过程,将内存中的对象通过ObjectOutputStream转换为二进制流,存储到硬盘文件中
        
    对象的反序列化过程,将二进制流通过ObjectInputStream转换为内存中的对象。

     

     

     

     

      RandomAccessFile:

     

    /*
         * RandomAccessFile:支持随机访问
         * 1.即可以充当一个输入流,又可以充当一个输出流
         * 2.支持从文件的开头读取、写入
         * 3.支持从任意位置的读入、写入(插入)
         */
        @Test
        public void testRandomAccess(){
            RandomAccessFile raf1 = null;
            RandomAccessFile raf2 = null;
            try {
                raf1 = new RandomAccessFile(new File("hello.txt"),"r");
                raf2 = new RandomAccessFile(new File("hello1.txt"),"rw");
                byte[] b = new byte[5];
                int len;
                while((len = raf1.read(b)) != -1){
                    raf2.write(b,0, len);
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally{
                if(raf1 != null){
                    try {
                        raf1.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    
                }
                if(raf2!=null){
                    try {
                        raf2.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    
                }
            }
        }

    /*
         * 实现文件指定位置插入数据
         */
        @Test
        public void test2(){
            
            RandomAccessFile raf = null;
            try {
                raf = new RandomAccessFile(new File("hello1.txt"), "rw");
                raf.seek(4);//把指针位置移到第4个位置
                byte[] b = new byte[10];
                int len;
                StringBuffer sb = new StringBuffer();
                while((len = raf.read(b))!=-1){
                    sb.append(new String(b,0,len));//把文件中当前指针位置后面的数据存到StringBuffer
                }
                raf.seek(4);
                raf.write("YHS".getBytes());
                raf.write(sb.toString().getBytes());
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally{
                if(raf!=null){
                    try {
                        raf.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    
                }
            }

     

     

     

  • 相关阅读:
    02.规划过程组表格-干系管理计划
    02.规划过程组表格-供方选择标准
    02.规划过程组表格-采购管理计划
    12动态规划运用实例
    11算法策略之动态规划
    10算法策略之贪婪法
    9算法策略之分治法
    8算法策略之枚举法
    7算法策略之递推法
    6数学模型和数学建模
  • 原文地址:https://www.cnblogs.com/yangHS/p/10699729.html
Copyright © 2011-2022 走看看