zoukankan      html  css  js  c++  java
  • IO流

    1、File类常用操作
    2、获取目录下所有文件和文件夹
    3、获取当前目录下所有.java文件
    4、从磁盘读取一个文件到内存,然后打印在控制台上
    5、写一个“HelloWorld”到文件系统中
    6、拷贝一张图片到另外一个目录
    7、读取一个文件,统计A和a分别出现了多少次
    8、统计一个文件中各个字母出现次数
    9、使用随机文件流类RandomAccessFile将一个文本文件倒置读出。

     1、File类常用操作

    package Demo;
    
    import java.io.File;
    import java.io.IOException;
    
    /**
     * Created by xuming on 2018/4/10.
     * 1. 在电脑D盘下创建一个文件为HelloWorld.txt文件,
     * 判断他是文件还是目录,再创建一个目录IOTest,
     * 之后将HelloWorld.txt移动到IOTest目录下去;
     * 之后遍历IOTest这个目录下的文件
     *
     * 程序分析:
     * 1、文件创建使用File的createNewFile()方法
     * 2、判断是文件用isFile(),判断是目录用isDirectory
     * 3、创建目录用:mkdirs()方法
     * 4、移动文件用:renameTo
     * 5、遍历目录用:list()方法获得存放文件的数组,foreach遍历的方法把文件打印出来
     */
    public class Demo1 {
        public static void main(String[]args) throws IOException {
            //创建文件
            File file = new File("D:","HelloWorld.txt");
            boolean isFile = file.createNewFile();
            if(isFile == true){
                System.out.println("创建成功");
            }else{
                System.out.println("已存在");
            }
    
            //判断是文件还是目录
            if(file.isDirectory()){
                System.out.println("是目录");
            }else if(file.isFile()){
                System.out.println("是文件");
            }
    
            //创建一个目录
            File fileDir = new File("D:" + File.separator + "HelloDir");
            boolean mkdirBoolean = fileDir.mkdir();
            if(mkdirBoolean == true){
                System.out.println("创建成功");
            }else{
                System.out.println("覆盖成功");
            }
    
            //将文件移动到目录下
            boolean renameBoolean = file.renameTo(new File(fileDir.getPath() + File.separator + file.getName()));
            if(renameBoolean == true){
                System.out.println("rename成功");
            }else{
                System.out.println("覆盖成功");
            }
        }
    }

    2、获取目录下所有文件和文件夹

    package Demo;
    
    import java.io.File;
    import java.util.ArrayList;
    import java.util.List;
    /**
     * Created by xuming on 2018/4/10.
     * 这是一个获取目录下所有文件夹内的所有文件的封装类,当然前提是你要传进来一个正确路径的文件夹
     */
    public class FileUtils {
        public static List getAllFiles(String dir){
            List<File> files = new ArrayList<File>();
            File file = new File(dir);
            if(file.exists() && file.isDirectory()){
                //获取目录下所有文件及文件夹。
                readFileAndDir(file , files);
            }
            return files;
        }
    
        //递归获取文件和文件夹。
        private static void readFileAndDir(File file, List<File> files) {
            File[] fileArr = file.listFiles();  //file下的所有目录和文件。
            if(fileArr ==null){
                return;
            }else{
                for(File fileTemp : fileArr){
                    files.add(fileTemp);
                    if(fileTemp.isDirectory()){
                        readFileAndDir(fileTemp , files);
                    }
                }
            }
        }
    
        public static void main(String [] args){
            List<File> files =  FileUtils.getAllFiles("D:");
            files.forEach(file -> {
                System.out.println(file.getParent()+"	"+file.getName());
            });
        }
    }

     3、获取当前文件夹下的所有.java文件

    package com.vtstar.sct.desktop.clients.FeedingLine21.swingUI.Demo;
    
    import java.io.File;
    import java.util.ArrayList;
    import java.util.List;
    /**
     * Created by xuming on 2018/4/10.
     * 递归实现列出当前工程下所有.java文件
     */
    public class Demo3 {
        public static List getAllFiles(String dir){
            List<File> files = new ArrayList<File>();
            File file = new File(dir);
            if(file.exists() && file.isDirectory()){
                //获取目录下所有文件及文件夹。
                readFileAndDir(file , files);
            }
            return files;
        }
    
        //递归获取文件和文件夹。
        private static void readFileAndDir(File file, List<File> files) {
            File[] fileArr = file.listFiles();  //file下的所有目录和文件。
            if(fileArr ==null){
                return;
            }else{
                for(File fileTemp : fileArr){
                    files.add(fileTemp);
                    if(fileTemp.isDirectory()){
                        readFileAndDir(fileTemp , files);
                    }
                }
            }
        }
    
        public static void main(String [] args){
            List<File> files = getAllFiles(".");   //.代表当前目录
            for(File file : files){
                if(file.getName().endsWith(".java")){
                    System.out.println(file.getName());
                }
            }
        }
    }

     4、从磁盘读取一个文件,然后答应到控制台上

    package Demo;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    /**
     * Created by xuming on 2018/4/10.
     * 从磁盘读取一个文件到内存中,再打印到控制台
     *
     *程序设计:
     * 1、读取文件用到FileinputSteam
     * 2、把读取的内容不断加入到StringBuffer,
     * 3、再把StringBuffer打印出来就可以
     */
    public class Demo4 {
        public static void main(String [] args){
            File file = new File("D:HelloWorld.txt");
            if(!file.isFile()){
                System.out.println("这不是个文件");
            }
            FileInputStream fileInputStream = null;
            int len = 0;
            StringBuilder stringBuilder = new StringBuilder();
            byte[] data = new byte[1024];
            try {
                fileInputStream = new FileInputStream(file);
                while ((len =fileInputStream.read(data)) != -1){
                    stringBuilder.append(new String(data,0,len));
                }
                fileInputStream.close();
            }catch (IOException e) {
                e.printStackTrace();
            }
            System.out.println(stringBuilder.toString());
        }
    }  

     5、写一个HelloWorld到文件系统中

    package com.vtstar.sct.desktop.clients.FeedingLine21.swingUI.Demo;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    /**
     *在程序中写一个"HelloJavaWorld你好世界"输出到操作系统文件Hello.txt文件中。
     *
     * 程序分析:文件写入,要用到输出流FileOutputStream
     */
    public class Demo5 {
        public static void main(String [] args) throws IOException {
            String date = "HelloJavaWrrld";
            File file = new File("D:/hello.txt");
            try {
    //          file.createNewFile();
                FileOutputStream fileOutputStream = fileOutputStream = new FileOutputStream(file);
                fileOutputStream.write(date.getBytes());
                fileOutputStream.flush();
                fileOutputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

     6、拷贝一张图片到另外一个目录

    package Demo;
    
    import java.io.*;
    /**
     * 拷贝一张图片,从一个目录到另外一个目录下(PS:是拷贝是不是移动)
     *
     * 程序设计思路:
     *  这题不能使用renameTo,
     *  解题步骤:
     * 1、在目的地址创建一个图片文件
     * 2、读取源地址文件的字节流
     * 3、把读取到的字节流写入到目的地址的文件里面
     * 4、刷新输出流,并关闭就可以了
     * */
    public class Demo6 {
        public static void main(String [] args) throws IOException {
            File fileSource = new File("D:/test.jpg");
            File fileTarget = new File("F:/test.jpg");
    
            FileInputStream fileInputStream = null;
            FileOutputStream fileOutputStream = null;
            try {
                fileInputStream = new FileInputStream(fileSource);
                fileOutputStream = new FileOutputStream(fileTarget);
                int len = 0;
                byte[] date = new byte[1024];
                while ((len = fileInputStream.read(date)) != -1){
                    fileOutputStream.write(date,0,len);
                }
                fileOutputStream.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                fileInputStream.close();
                fileOutputStream.close();
            }
        }
    }

     7、读取一个文件,判断A和a各出现了多少次

    package Demo;
    
    import java.io.*;
    /**
     * 统计一个文件calcCharNum.txt(见附件)中字母'A'和'a'出现的总次数
     *
     * 程序分析:
     * 读取文件用FileInputStream
     * 一次只读一个字节(一个字母就是一个字节),当字节内容和A或a相等时,相应的数量加1
     * */
    public class Demo7 {
        public static void main(String [] args) throws IOException {
            int aNum = 0;
            int ANum = 0;
            File file = new File("D:/test.txt");
            FileInputStream fileInputStream = new FileInputStream(file);
            byte[] date = new byte[1];
            while ((fileInputStream.read(date)) != -1){
                if(date[0] == 'A'){
                    ANum ++;
                }else if(date[0] == 'a'){
                    aNum ++;
                }
            }
            fileInputStream.close();
            System.out.println("A出现的次数:"+ANum+"
    "+"a出现的次数为:"+aNum);
        }
    }

     8、统计一个文件中各个字母出现的次数

     

    package Demo;
    
    import java.io.*;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Set;
    
    /**
     * 统计一个文件中各个字母出现次数:
     * A(8),B(16),C(10)...,a(12),b(10),c(3)....,括号内代表字符出现次数;
     * */
    public class Demo8 {
        public static void main(String [] args) throws IOException {
            File file = new File("D:/test.txt");
            FileInputStream fileInputStream = new FileInputStream(file);
            HashMap<Byte,Integer> hashMap = new HashMap<>();
            byte[] date = new byte[1];
            while((fileInputStream.read(date)) != -1){
                byte nowByte = date[0];
                if(hashMap.containsKey(nowByte)){
                    hashMap.put(nowByte,hashMap.get(nowByte)+1);
                }else{
                    hashMap.put(nowByte,1);
                }
            }
            fileInputStream.close();
            Set<Map.Entry<Byte,Integer>> entrySet = hashMap.entrySet();
            entrySet.forEach(entry->{
                System.out.println(test15(entry.getKey())+"("+entry.getValue()+")");
            });
        }
        /**
         * Byte97变String
         * @param a
         * @return
         */
        public static String test15(byte a) {
            String returnStr = null;
            for (byte i = 0; i < 26; i++) {
                if ((65 + i) == a) {
                    returnStr =  (char) (65 + i)+"";
                }
                if ((97 + i) == a) {
                    returnStr =  (char) (97 + i)+"";
                }
            }
            return returnStr;
        }
    }

     

    9、使用随机文件流RandomAccessFile将一个文本倒置读出

    package Demo;
    import java.io.*;
    /**
     *使用随机文件流类RandomAccessFile将一个文本文件倒置读出。
     *
     * 程序分析:
     *  RandomAccessFile的seek方法能把读取文件的光标移动到具体的位置
     * 但是还是有地点值得注意的是一个字母或数字是占用一个字节的, 一个汉字是占用两个字节的
     */
    public class Demo9 {
        public static void main(String [] args) throws IOException {
            File file = new File("D:/test.txt");
            try {
                RandomAccessFile raf = new RandomAccessFile(file, "r");
                long length = raf.length();     //文本有多长
                StringBuffer sb = new StringBuffer();
                while (length > 0) {
                    length--;
                    raf.seek(length);
                    int c = (char) raf.readByte();
                    // 如果asc码<=255,>=0,则判断是个英文字符,添加到字符串中。
                    if (c >= 0 && c <= 255) {
                        sb.append((char) c);
                    } else {
                        // 如果不在asc码范围内,则判断是个汉字字符
                        // 汉字字符是占2个字节的,所以length再退一个字节
                        length--;
                        raf.seek(length);
                        byte[] cc = new byte[2];
                        // cc被复制为文件中连续的两个字节
                        raf.readFully(cc);
                        sb.append(new String(cc));
                    }
                }
                System.out.println(sb);
                raf.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
  • 相关阅读:
    洛谷P1710 地铁涨价
    洛谷P1371 NOI元丹
    洛谷P2409 Y的积木
    洛谷P3392 涂国旗
    洛谷P3370 【模板】字符串哈希
    洛谷P3379 【模板】最近公共祖先(LCA)
    洛谷P3372 【模板】线段树 1
    洛谷P3373 【模板】线段树 2
    Android(java)学习笔记31:泛型高级之通配符
    Android(java)学习笔记30:泛型接口的概述和使用
  • 原文地址:https://www.cnblogs.com/Xmingzi/p/8777077.html
Copyright © 2011-2022 走看看