zoukankan      html  css  js  c++  java
  • java文件读取与写入

    package com.myjava;
    
    import java.io.*;
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    
    /**
     * Created by 14061371 on 2017/5/12.
     */
    public class FileUtils {
        //获取当前路径
    
        /** 按字节读取
         *
         * @param fileName
         */
        public static void readFileByBytes(String fileName){
            File file=new File(fileName);
            if(!file.exists()){
                return;
            }
            InputStream in = null;
            try {
                in = new FileInputStream(file);
                byte[] tempbytes = new byte[100];
                int byteread = 0;
                in = new FileInputStream(fileName);
                // 读入多个字节到字节数组中,byteread为一次读入的字节数
                while ((byteread = in.read(tempbytes)) != -1) {
                    System.out.write(tempbytes, 0, byteread);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                if (in != null) {
                    try {
                        in.close();
                    } catch (IOException e1) {
                    }
                }
            }
        }
    
        /**
         * 按字符读取
         * @param fileName
         */
        public static void readFileByChars(String fileName){
            File file=new File(fileName);
            if(!file.exists()){
                return;
            }
            Reader reader=null;
            try {
                reader=new InputStreamReader(new FileInputStream(file));
                int tempChart;
                char[] tempchars = new char[30];
                while((tempChart=reader.read(tempchars))!=-1){
                    System.out.print(tempchars);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }finally{
                if(reader!=null){
                    try{
                        reader.close();
                    }catch (IOException e){
    
                    }
                }
            }
        }
    
        /**
         * 按行读取
         * @param fileName
         */
        public static void readFileByLines(String fileName){
            File file=new File(fileName);
            if(!file.exists()){
                return;
            }
            BufferedReader reader=null;
            try {
                reader=new BufferedReader(new FileReader(file));
                String tempString=null;
                int line=1;
                while((tempString=reader.readLine())!=null){
                    System.out.println(line+tempString);
                    line++;
                }
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }finally{
                if(reader!=null){
                    try{
                        reader.close();
                    }catch(IOException e){
    
                    }
                }
            }
        }
    
        /**
         * random读取文件
         * @param fileName
         */
        public static void readFileByRandomAccess(String fileName){
            RandomAccessFile randomFile=null;
            try {
                randomFile=new RandomAccessFile(fileName,"r");
                long fileLength=randomFile.length();
                randomFile.seek(0);
                byte[] bytes=new byte[10];
                int byteread=0;
                while((byteread=randomFile.read(bytes))!=-1){
                    System.out.write(bytes,0,byteread);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                if (randomFile != null) {
                    try {
                        randomFile.close();
                    } catch (IOException e) {
    
                    }
                }
            }
        }
    
        /**
         * 读取文件最后N行
         *
         * 根据换行符判断当前的行数,
         * 使用统计来判断当前读取第N行
         *
         * PS:输出的List是倒叙,需要对List反转输出
         *
         * @param file 待文件
         * @param numRead 读取的行数
         * @return List<String>
         */
        public static List<String> readLastNLine(File file, long numRead) {
            // 定义结果集
            List<String> result = new ArrayList<String>();
            //行数统计
            long count = 0;
    
            // 排除不可读状态
            if (!file.exists() || file.isDirectory() || !file.canRead()) {
                return null;
            }
    
            // 使用随机读取
            RandomAccessFile fileRead = null;
            try {
                //使用读模式
                fileRead = new RandomAccessFile(file, "r");
                //读取文件长度
                long length = fileRead.length();
                //如果是0,代表是空文件,直接返回空结果
                if (length == 0L) {
                    return result;
                } else {
                    //初始化游标
                    long pos = length - 1;
                    while (pos > 0) {
                        pos--;
                        //开始读取
                        fileRead.seek(pos);
                        //如果读取到
    代表是读取到一行
                        if (fileRead.readByte() == '
    ') {
                            //使用readLine获取当前行
                            String line = fileRead.readLine();
                            //保存结果
                            result.add(line);
                            //打印当前行
                            // System.out.println(line);
                            //行数统计,如果到达了numRead指定的行数,就跳出循环
                            count++;
                            if (count == numRead) {
                                break;
                            }
                        }
                    }
                    if (pos == 0) {
                        fileRead.seek(0);
                        result.add(fileRead.readLine());
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (fileRead != null) {
                    try {
                        //关闭资源
                        fileRead.close();
                    } catch (Exception e) {
                    }
                }
            }
            Collections.reverse(result);
            return result;
        }
    
        /**
         * 使用RandomAccessFile追加文件
         * @param fileName
         */
        public static void appendFileByAccess(String fileName,String content){
            try {
                RandomAccessFile randomFile=new RandomAccessFile(fileName,"rw");
                long fileLength=randomFile.length();
                randomFile.seek(fileLength);
                randomFile.writeBytes(content);
                randomFile.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 使用FileWriter 追加文件内容
         * @param fileName
         * @param content
         */
        public static void appendFile(String fileName,String content){
            try {
                FileWriter writer=new FileWriter(fileName,true);
                writer.write(content);
                writer.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 往文件头插入数据
         * @param filename
         * @param pos
         * @param insertContent
         */
        public static void insert(String filename, int pos, String insertContent){
            RandomAccessFile raf=null;
            FileOutputStream tmpOut=null;
            FileInputStream tmpIn=null;
            try{
                File tmp = File.createTempFile("tmp", null);
                tmp.deleteOnExit();
                raf = new RandomAccessFile(filename, "rw");
                tmpOut = new FileOutputStream(tmp);
                tmpIn = new FileInputStream(tmp);
                raf.seek(pos);//首先的话是0
                byte[] buf = new byte[64];
                int hasRead = 0;
                while ((hasRead = raf.read(buf)) > 0) {
                    //把原有内容读入临时文件
                    tmpOut.write(buf, 0, hasRead);
    
                }
                raf.seek(pos);
                raf.write(insertContent.getBytes());
                //追加临时文件的内容
                while ((hasRead = tmpIn.read(buf)) > 0) {
                    raf.write(buf, 0, hasRead);
                }
            }catch (IOException e) {
                e.printStackTrace();
            }finally{
                try {
                    if (raf != null) {
                        raf.close();
                    }
                    if (tmpOut != null) {
                        tmpOut.close();
                    }
                    if (tmpIn != null) {
                        tmpIn.close();
                    }
                } catch (IOException e) {
    
                }
            }
        }
    }
  • 相关阅读:
    Linux计划任务Crontab实例详解教程
    配置Linux任务计划
    全局变量报错:UnboundLocalError: local variable 'l' referenced before assignment
    Multipath多路径冗余全解
    Ubuntu 查看文件以及磁盘空间大小管理
    转载
    grep的用法
    Python标准库06 子进程 (subprocess包)
    Python与shell的3种交互方式介绍
    python和shell变量互相传递的几种方法
  • 原文地址:https://www.cnblogs.com/web369/p/6846997.html
Copyright © 2011-2022 走看看