文件操作常用工具方法

写字节到文件:

/**
     * 工具方法,写bytes到文件中 如果写入过程出现异常就删除文件
     *
     * @param bytes
     * @param file
     */
    public static void writeBytesToFile(byte[] bytes, File file) {
        RandomAccessFile access = null;
        try {
            access = new RandomAccessFile(file, "rw");
            access.write(bytes);
        } catch (IOException e) {
            if (e.getMessage() != null) {
                Log.e("JsonUtil2", e.getMessage());
            }
            file.delete();
        } finally {
            JsonUtil.release(access);
        }
    }

随机读取文件的字节:

/**
     * 工具方法,随机位置读取文件的字节
     *
     * @param file
     * @param position
     * @param length
     * @return
     */
    public static byte[] readFile(File file, int position, int length) {
        if (file == null || !file.exists() || !file.isFile()) {
            return null;
        }
        RandomAccessFile access = null;
        byte[] bytes = new byte[length];
        try {
            access = new RandomAccessFile(file, "r");
            access.seek(position);
            access.readFully(bytes, 0, length);
            return bytes;
        } catch (Exception e) {
            if (e.getMessage() != null) {
                Log.e("JsonUtil2", e.getMessage());
            }
            return null;
        } finally {
            JsonUtil.release(access);
        }
    }

读取文件的全部字节:

/**
     * 工具方法,读文件的字节
     *
     * @param file
     * @return
     */
    private static byte[] readFile(File file) {
        if (file == null || !file.isFile() || !file.canRead()) {
            return null;
        }
        FileInputStream fis = null;
        BufferedInputStream bis = null;
        long fileSize = file.length();
        if (fileSize > Integer.MAX_VALUE) {
            System.out.println("file too big...");
            return null;
        }
        ByteArrayOutputStream bos = new ByteArrayOutputStream((int) fileSize);
        try {
            bis = new BufferedInputStream(new FileInputStream(file));
            int buf_size = 1024;
            byte[] buffer = new byte[buf_size];
            int len = 0;
            while (-1 != (len = bis.read(buffer, 0, buf_size))) {
                bos.write(buffer, 0, len);
            }
            return bos.toByteArray();
        } catch (IOException e) {
            Log.e("JsonUtil2", "read bytes form file error");
            return null;
        } finally {
            JsonUtil.release(fis);
            JsonUtil.release(bis);
        }
    }

从文件中读取出字符串:

/**
     * 从给定文件中读出字符串
     *
     * @param file
     * @return string, null 如果文件不存在
     */
    public static String readFromFile(File file) {
        if (file == null || !file.exists() || !file.isFile()) {
            Log.e("JsonUtil", "cannot read file");
            return null;
        }
        StringBuilder sBuilder = new StringBuilder("");
        FileReader fr = null;
        BufferedReader br = null;
        char[] buffer = new char[1024];
        int length = -1;
        try {
            fr = new FileReader(file);
            br = new BufferedReader(fr);
            while ((length = br.read(buffer)) != -1) {
                sBuilder.append(buffer, 0, length);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            release(fr);
            release(br);
        }
        if (sBuilder.length() == 0) {// 如果读取后长度仍为零
            return null;
        }
        // Log.i("bbbbb", ""+sBuilder.toString());//test
        /**
         * 要判断第一个char是不是utf8 bom文件头 如果是则去掉第一个char
         */
        if (getTHEChar().equals(((Character) (sBuilder.charAt(0))))) {
            sBuilder.deleteCharAt(0);
        }
        return sBuilder.toString();
    }

释放closable资源:

/**
     * 释放closable的资源
     *
     * @param closeobj
     */
    public static void release(Closeable closeobj) {
        if (closeobj != null) {
            try {
                closeobj.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            closeobj = null;
        }
    }

写字符串到文件:

/**
     * 将指定字符串写入指定文件中,覆盖写
     *
     * @param file
     * @param str
     * @param cover
     *            是否覆盖写,true 覆盖,false 追加
     */
    private static void writeToFile(File file, String str, Boolean cover) {
        cover = !cover;
        if (file == null || !file.exists() || !file.isFile()) {
            Log.e("JsonUtil", "cannot write file");
            return;
        }
        if (str == null) {
            return;
        }

        FileWriter fw = null;
        BufferedWriter bw = null;

        try {
            fw = new FileWriter(file, cover);
            bw = new BufferedWriter(fw);
            // Log.e("JsonUtil",file.getAbsolutePath());
            bw.write(str);
            bw.flush();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            release(fw);
            release(bw);
        }
    }

有BOM的utf-8文件头:

/**
     * 得到utf8文件头的char
     *
     * @return
     */
    private static Character getTHEChar() {
        byte a = (byte) 239;// 0xef(byte)0xef;eb
        byte b = (byte) 187;// (byte)0xbb;bc
        byte c = (byte) 191;// 0xbf;80
        // char ret =
        // (char)(((a&0x000000ff)<<24)|(b&0x000000ff)<<16|(c&0x000000ff)<<8|0x00000000);
        // return (Character)ret;
        char[] chars = getChars(new byte[] { a, b, c });
        return (Character) chars[0];
    }

    /**
     * bytes转chars
     *
     * @param bytes
     * @return
     */
    private static char[] getChars(byte[] bytes) {
        Charset cs = Charset.forName("UTF-8");
        ByteBuffer bb = ByteBuffer.allocate(bytes.length);
        bb.put(bytes);
        bb.flip();
        CharBuffer cb = cs.decode(bb);
        return cb.array();
    }
时间: 2024-12-14 08:13:30

文件操作常用工具方法的相关文章

jQuery常用工具方法

前面的话 jQuery提供一些与元素无关的工具方法,不必选中元素,就可以直接使用这些方法.如果理解原生javascript的继承原理,那么就能理解工具方法的实质.它是定义在jQuery构造函数上的方法,即jQuery.method(),所以可以直接使用.而那些操作元素的方法,是定义在构造函数的prototype对象上的方法,即jQuery.prototype.method(),所以必须生成实例(即选中元素)后使用.把工具方法理解成像javascript原生函数那样可以直接使用的方法就行了.下面将

分布式进阶 十 linux命令行下载文件以及常用工具 wget Prozilla MyGet Linuxdown Cu

linux命令行下载文件以及常用工具:wget.Prozilla.MyGet.Linuxdown.Curl.Axel 本文介绍常用的几种命令行式的下载工具:wget.Prozilla.MyGet.Linuxdown.Curl.Axel 下面就为大家详细介绍一下这些工具. 1. Wget Wget是一个十分常用命令行下载工具,多数Linux发行版本都默认包含这个工具.如果没有安装可在http://www.gnu.org/software/wget/wget.html 下载最新版本. 1.1 编译安

python中文件操作的其他方法

前面介绍过Python中文件操作的一般方法,包括打开,写入,关闭.本文中介绍下python中关于文件操作的其他比较常用的一些方法. 首先创建一个文件poems: p=open('poems','r',encoding='utf-8')for i in p:print(i)结果如下: hello,everyone白日依山尽,黄河入海流.欲穷千里目,更上一层楼. 1.readline   #读取一行内容 p=open('poems','r',encoding='utf-8') print(p.rea

c语言文件操作常用函数及读写文件代码举列

文件操作常用函数 fopen() 打开流 fclose() 关闭流 fputc() 写一个字符到流中 fgetc() 从流中读一个字符 fseek() 在流中定位到指定的字符 fputs() 写字符串到流 fgets() 从流中读一行或指定个字符 fprintf() 按格式输出到流 fscanf() 从流中按格式读取 feof() 到达文件尾时返回真值 ferror() 发生错误时返回其值 rewind() 复位文件定位器到文件开始处 remove() 删除文件 fread() 从流中读指定个数

java常用工具方法2

/* * Copyright 2005 Joe Walker * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LI

python 学习 D8 文件操作 常用操作方法 文件的改

文件操作初识 在d盘创建"护士空姐学生少妇联系方式"的txt 文件 path 文件路径:d:\护士空姐学生少妇联系方式.txtencoding编码方式:utf-8,gbk....mode 操作方式: 只读,只写,追加,读写,写读..... # f2 = open('护士学生空姐班主任.txt', encoding='utf-8') # print(f2.read()) # f1.close() 路径:绝对路径:从根目录开始一直找到文件. 相对路径:从当前目录开始找到的文件. 错误原因分

强大的pdf文件操作小工具——PDFtk的小白用法

前言 作为程序员,大家都知道的,总是会被技术小白问各种跟编程没什么关系的硬件.软件问题.曾经被一技术小白同事问到有没有什么办法合并pdf文件,当时自己也是一头雾水,因为自己工作生活很少会去操作pdf文件,而当时公司对开发人员的电脑权限管理很严格,不论是上网还是安装软件,都受到很大限制,最后硬着头皮忙活了一阵子也没在解决. 前两天在写批处理程序的时候,发现批处理程序是有合并文件的命令的,我忽然想起之前这个同事的问题,就试了一下合并pdf,然而并不行.虽然失落了一下,但本着学习的精神还是百度了一下关

JavaScript 深入学习及常用工具方法整理 ---- 01.浮点数

在JavaScript中是不区分整数值和浮点数值的,其中所有的数字均用浮点数值表示.JavaScript采用IEEE 754标准(有兴趣可以浏览网络规范分类下的IEEE 754标准,需要原文件请在留言处联系我)定义的64位浮点格式表示数字. 目前只针对浮点数的计算.其他的内容会在后续时间进行完善,也希望大家积极提供资源,让你学到的更多. 浮点数直接量可以用以下语法表示: [digits][.digits][(E|e)[(+|-)]digits] IEEE754是一种二进制表示法,可以精确的表示(

GO 文件读取常用的方法

方式1: 一行一行的方式读取 其中常用的方法就有:ReadString,ReadLine,ReadBytes ReadLine 返回单个行,不包括行尾字节,就是说,返回的内容不包括\n或者\r\n,返回的类型为[]byte ReadString('\n') 以分隔字符方式读取,遇到传入的分割字符时就返回结果,返回的结果包含分隔字符本身,返回的类型为string,比如传入\n,代码遇到\n字符就返回,而文件行尾都是以\n结尾,所以ReadString('\n')就实现了分行读取 ReadBytes