zoukankan      html  css  js  c++  java
  • JAVA笔记11__File类/File类作业/字节输出流、输入流/字符输出流、输入流/文件复制/转换流

    /**
     * File类:文件的创建、删除、重命名、得到路径、创建时间等,是唯一与文件本身有关的操作类
     */
    public class Main {
    
        public static void main(String[] args) {
            //File.separator 表示分隔符
            File f1 = new File("c:" + File.separator + "fuck" + File.separator + "javaTest1.txt");
            String s1 = File.pathSeparator; //路径分隔符
            System.out.println(File.separator + "  " + s1);
    
            boolean b1 = f1.exists(); //文件是否存在
            System.out.println(b1);
            if (!b1) {
                try {
                    boolean bt1 = f1.createNewFile(); //创建文件
                    System.out.println(bt1);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            System.out.println(f1.delete()); //删除文件
    
            //System.out.println(""); 快捷键:打sout,然后中按Tab键 
            System.out.println(f1.getParent()); //得到文件的上一级路径 
    
            System.out.println(f1.isDirectory()); //判断是否是目录
            
            File f2 = new File("c:" + File.separator + "fuck" + File.separator);
            String[] fname = f2.list(); //列出文件夹中的所有文件名
            for(String i:fname) System.out.println(i);
            
            File[] files = f2.listFiles(); //列出文件中的所有文件,以file数组返回
            for(File i:files) System.out.println(i.getName()+" "+i.length());
            
            File f3 = new File("c:\fuck\JavaTest1"); 
            System.out.println(f3.mkdir()); //创建文件夹
            f3.delete();
            
            System.out.println(f3.renameTo(new File("c:\fuck\JavaTest2"))); //重命名
        }
    }
    /**
     * 在某个目录中找到某个扩展名的所有文件
     */
    public class Main {
        private static int num = 0;
        public static void findFile(File f,String extName){
            if(f==null)
                return;
            else{
                if(f.isDirectory()){
                    File[] fs = f.listFiles();
                    if(fs!=null){
                        for(File i:fs)
                            findFile(i,extName);
                    }
                }else{
                    String path = f.getPath().toLowerCase();
                    if(path.endsWith(extName)){
                        System.out.println(f.getPath());
                        ++num;
                    }
                }
            }
        }
        public static void main(String[] args) {
            File  f = new File("c:\fuck\");
            String extName = ".cpp";
            findFile(f,extName);
            System.out.println(num);
        }
    }
    /**
     * IO流:输入输出流
     * 流:一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。
     * 流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。
     * 根据处理数据类型的不同分为:1.字符流      2.字节流
     * 根据数据流向不同分为:1.输入流(程序从外部读取)       2.输出流(程序将数据写到外部)
     * 
     * OutputStream类:接受输出字节并将这些字节发送到某个接收器
     */
    public class Main {
        
        public static void main(String[] args) {
            //write1();
            write2();
            System.out.println("finished.");
        }
        
        /**
         * 字节输出流方式一:每次输出一个字节
         */
        public static void write1(){
            OutputStream out = null;
            try {
                out = new FileOutputStream("c:\fuck\javaTest1.txt");
                String info = "helloIO";
                byte[] bs = info.getBytes();
                for(int i=0;i<bs.length;++i)
                    out.write(bs[i]);
    
            } catch (FileNotFoundException ex) {
                ex.printStackTrace();
            } catch (IOException ex) {
                ex.printStackTrace();
            } finally {
                try {
                    out.close();
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
        }
        
        /**
         * 字节输出流方式二:每次输出指定大小字节
         */
        public static void write2(){
            OutputStream out = null;
            try {
                out = new FileOutputStream("c:\fuck\javaTest1.txt",true); //参数true表示追加输出 
                String info = "hello fish7";
                byte[] bs = info.getBytes();
                //out.write(bs);
                out.write(bs,0,5);
    
            } catch (FileNotFoundException ex) {
                ex.printStackTrace();
            } catch (IOException ex) {
                ex.printStackTrace();
            } finally {
                try {
                    out.close();
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
        }
    }
    public class Main {
        
        public static void main(String[] args) {
            //read1();
    //        read2();
            read3();
            System.out.println("finished.");
        }
        
        /**
         * 字节输入流的读取方式一:每次读取一个字节
         */
        public static void read1(){
            InputStream  in = null;
            try {
                in = new FileInputStream("c:\fuck\javaTest1.txt");
                int bs = -1; //定义一个字节,-1表示没有数据
                while((bs = in.read())!=-1){
                    System.out.print((char)bs);     
                }
                System.out.println("");
            } catch (FileNotFoundException ex) {
                ex.printStackTrace();
            } catch (IOException ex) {
                ex.printStackTrace();
            } finally{
                try {
                    in.close();
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
        }
       
        /**
         * 字节输入流的读取方式二:一次性读取所有字节(适合不太大的文件)
         */
        public static void read2(){
            InputStream in = null;
            try {
                File f = new File("c:\fuck\javaTest1.txt");
                in = new FileInputStream(f);
                byte[] bs = new byte[(int)f.length()]; //根据文件大小构造字节数组
                int len = in.read(bs);
                System.out.println(new String(bs));
                System.out.println("len = "+len);
    
            } catch (FileNotFoundException ex) {
                ex.printStackTrace();
            } catch (IOException ex) {
                ex.printStackTrace();
            } finally{
                try {
                    in.close();
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
        }
        
        /**
         * 字节输入流的读取方式三:每次读取指定大小的字节(折中的方法)
         */
        public static void read3(){
            InputStream in = null;
            try {
                File f = new File("c:\fuck\javaTest1.txt");
                in = new FileInputStream(f);
                byte[] bs = new byte[5];
                int len = -1; //每次读取的实际长度
                StringBuilder sb = new StringBuilder();
                while((len=in.read(bs))!=-1){
                    sb.append(new String(bs,0,len));
                }
                System.out.println(sb);
    
            } catch (FileNotFoundException ex) {
                ex.printStackTrace();
            } catch (IOException ex) {
                ex.printStackTrace();
            } finally{
                try {
                    in.close();
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
        }
    }
    /**
     * 字符流:底层也是用字节流实现的
     */
    public class Main {
        
        public static void main(String[] args) {
            writer1();
            System.out.println("finished.");
        }
       
        /**
         * 字符输出流方式一:以字符数组方式输出
         */
        public static void writer1(){
            Writer out = null;
            try {
                File f = new File("c:\fuck\javaTest1.txt");
                out = new FileWriter(f,true); //true表示追加方式 
                String info = "good good study, day day up.";
                //out.write(info.toCharArray());
                out.write(info);
                
            } catch (IOException ex) {
                ex.printStackTrace();
            } finally{
                try{
                    out.close();
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
        }
    }
    /**
     * 字符流:底层也是用字节流实现的
     */
    public class Main {
        
        public static void main(String[] args) {
            //byteReader(); //输出一堆乱码
            reader1();
            System.out.println("finished.");
        }
        
        /**
         * 字符输入流方式一:使用指定大小的字符数组输入
         */
        public static void reader1(){
            File f = new File("c:\fuck\javaTest1.txt");
            try {
                Reader in = new FileReader(f);
                char[] cs = new char[10];
                int len = -1;
                StringBuilder sb = new StringBuilder();
                while((len=in.read(cs))!=-1){
                    sb.append(new String(cs,0,len));
                }
                in.close();
                System.out.println(sb);
                
            } catch (FileNotFoundException ex) {
                ex.printStackTrace();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
        
        /**
         * 使用字节流读取文本文件
         */
        public static void byteReader(){
            File f = new File("c:\fuck\javaTest1.txt");
            try {
                InputStream in = new FileInputStream(f);
                byte[] bs = new byte[10];
                int len = -1;
                StringBuilder sb = new StringBuilder();
                while((len=in.read(bs))!=-1){
                    sb.append(new String(bs,0,len));
                }
                in.close();
                System.out.println(sb);
                
            } catch (FileNotFoundException ex) {
                ex.printStackTrace();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }
    /**
     * 字符流:底层也是用字节流实现的
     * :根据指定的编码,将1个或多个字节转化为java里的unicode字符,然后进行操作
     * 字符操作一般用Writer,Reader等,字节操作一般用InputStream,OutputStream以及各种包装类,比如:
     * BufferedInputStream和BufferedOutputStream等
     * 总结:如果你确认你要处理的流是可打印的字符,那么使用字符流会简单些,如果不确认,那么用字节流总是不会错的。
     */
    public class Main {
        
        public static void main(String[] args) {
            //byteReader(); //输出一堆乱码
            reader1();
            System.out.println("finished.");
        }
        
        /**
         * 字符输入流方式一:使用指定大小的字符数组输入
         */
        public static void reader1(){
            File f = new File("c:\fuck\javaTest1.txt");
            try {
                Reader in = new FileReader(f);
                char[] cs = new char[10];
                int len = -1;
                StringBuilder sb = new StringBuilder();
                while((len=in.read(cs))!=-1){
                    sb.append(new String(cs,0,len));
                }
                in.close();
                System.out.println(sb);
                
            } catch (FileNotFoundException ex) {
                ex.printStackTrace();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
        
        /**
         * 使用字节流读取文本文件
         */
        public static void byteReader(){
            File f = new File("c:\fuck\javaTest1.txt");
            try {
                InputStream in = new FileInputStream(f);
                byte[] bs = new byte[10];
                int len = -1;
                StringBuilder sb = new StringBuilder();
                while((len=in.read(bs))!=-1){
                    sb.append(new String(bs,0,len));
                }
                in.close();
                System.out.println(sb);
                
            } catch (FileNotFoundException ex) {
                ex.printStackTrace();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }
    /**
     * 指定一个盘符下的文件,把该文件复制到指定的目录下。
     */
    public class Main {
        
        public static void main(String[] args) {
            copyFile("c:\fuck\javaTest1.txt","c:\fuck\javaTest2.txt");
            copyFile("c:\fuck\ning.bmp","c:\fuck\ning2.txt"); //把.txt改成.bmp就可以看了
            System.out.println("finished.");
        }
        
        public static void copyFile(String src,String des){
            File f1 = new File(src);
            File f2 = new File(des);
            InputStream in = null;
            OutputStream out = null;
            try {
                in = new FileInputStream(f1);
                out = new FileOutputStream(f2);
                byte[] bs = new byte[105];
                int len = -1;
                while((len=in.read(bs))!=-1){
                    out.write(bs,0,len);
                }
                
            } catch (FileNotFoundException ex) {
                ex.printStackTrace();
            } catch (IOException ex) {
                ex.printStackTrace();
            } finally{
                try {
                    in.close();
                    out.close();
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
            
        }
    }
    /**
     * 转换流:将一个字节流转换为字符流,也可以将一个字符流转换为字节流
     * OutputStreamWriter:可以将输出的字符流转换为字节流的输出形式,可使用指定的charset将要写入流
     *                     中的字符编码成字节。
     * InputStreamReader:将输入的字节流转换为字符流输入形式,使用指定的charset读取字节并将其解码为
     *                    字符。
     */
    public class Main {
        
        public static void main(String[] args) {
            //writer();
            reader();
            System.out.println("finished.");
        }
        
        public static void writer(){ //把字符流转成字节流
            try {
                OutputStream out = new FileOutputStream("c:\fuck\javaTest1.txt"); 
                String info = "你好吗abc.";
                Writer w1 = new OutputStreamWriter(out); //通过字节输出流构造一个字符输出流
                w1.write(info);
                
                w1.close();
                out.close();
            } catch (FileNotFoundException ex) {
                ex.printStackTrace();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
        
        public static void reader(){ //把字节流转成字符流
            try {
                InputStream in = new FileInputStream("c:\fuck\javaTest1.txt"); 
                Reader r1 = new InputStreamReader(in);
                char[] cs = new char[105];
                int len = -1;
                StringBuilder sb = new StringBuilder();
                while((len=r1.read(cs))!=-1){
                    sb.append(new String(cs,0,len));
                }
                r1.close();
                in.close();
                System.out.println(sb);
              
            } catch (FileNotFoundException ex) {
                ex.printStackTrace();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }
  • 相关阅读:
    NYOJ 35
    TOJ 3072
    HDU 1075
    POJ 1028
    TOJ 1153
    TOJ 1036
    POJ 1521
    POJ 3253
    NYOJ 467
    HDU 1671
  • 原文地址:https://www.cnblogs.com/fish7/p/4149726.html
Copyright © 2011-2022 走看看