java 文件读写工具类

来源:互联网 发布:dwg转pdf软件 编辑:程序博客网 时间:2024/06/05 06:27
importjava.io.BufferedReader;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileReader;importjava.io.FileWriter;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.io.RandomAccessFile;importjava.io.Reader; /** * * @类名: FileUtil * @作用: TODO * @日期: 2012-3-1 下午04:58:31 */ publicclass FileUtil {    /**     * 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。     * @param fileName    文件的名     */    publicstatic void readFileByBytes(String fileName) {        File file = newFile(fileName);        InputStream in = null;        try{            System.out.println("以字节为单位读取文件内容,一次读一个字节:");            // 一次读一个字节            in = newFileInputStream(file);            inttempbyte;            while((tempbyte = in.read()) != -1) {                System.out.write(tempbyte);            }            in.close();        }catch(IOException e) {            e.printStackTrace();            return;        }        try{            System.out.println("以字节为单位读取文件内容,一次读多个字节:");            // 一次读多个字节            byte[] tempbytes = newbyte[100];            intbyteread = 0;            in = newFileInputStream(fileName);            FileUtil.showAvailableBytes(in);            // 读入多个字节到字节数组中,byteread为一次读入的字节数            while((byteread = in.read(tempbytes)) != -1) {                System.out.write(tempbytes,0, byteread);            }        }catch(Exception e1) {            e1.printStackTrace();        }finally{            if(in != null) {                try{                    in.close();                }catch(IOException e1) {                }            }        }    }     /**     * 以字符为单位读取文件,常用于读文本,数字等类型的文件     *     * @param fileName     *            文件名     */    publicstatic void readFileByChars(String fileName) {        File file = newFile(fileName);        Reader reader = null;        try{            System.out.println("以字符为单位读取文件内容,一次读一个字节:");            // 一次读一个字符            reader = newInputStreamReader(newFileInputStream(file));            inttempchar;            while((tempchar = reader.read()) != -1) {                // 对于windows下,rn这两个字符在一起时,表示一个换行。                // 但如果这两个字符分开显示时,会换两次行。                // 因此,屏蔽掉r,或者屏蔽n。否则,将会多出很多空行。                if(((char) tempchar) != 'r') {                    System.out.print((char) tempchar);                }            }            reader.close();        }catch(Exception e) {            e.printStackTrace();        }        try{            System.out.println("以字符为单位读取文件内容,一次读多个字节:");            // 一次读多个字符            char[] tempchars = newchar[30];            intcharread = 0;            reader = newInputStreamReader(newFileInputStream(fileName));            // 读入多个字符到字符数组中,charread为一次读取字符数            while((charread = reader.read(tempchars)) != -1) {                // 同样屏蔽掉r不显示                if((charread == tempchars.length)                        && (tempchars[tempchars.length - 1] != 'r')) {                    System.out.print(tempchars);                }else{                    for(inti = 0; i < charread; i++) {                        if(tempchars[i] == 'r') {                            continue;                        }else{                            System.out.print(tempchars[i]);                        }                    }                }            }        }catch(Exception e1) {            e1.printStackTrace();        }finally{            if(reader != null) {                try{                    reader.close();                }catch(IOException e1) {                }            }        }    }     /**     * 以行为单位读取文件,常用于读面向行的格式化文件     *     * @param fileName     *            文件名     */    publicstatic void readFileByLines(String fileName) {        File file = newFile(fileName);        BufferedReader reader = null;        try{            System.out.println("以行为单位读取文件内容,一次读一整行:");            reader = newBufferedReader(newFileReader(file));            String tempString = null;            intline = 1;            // 一次读入一行,直到读入null为文件结束            while((tempString = reader.readLine()) != null) {                // 显示行号                System.out.println("line " + line + ": " + tempString);                line++;            }            reader.close();        }catch(IOException e) {            e.printStackTrace();        }finally{            if(reader != null) {                try{                    reader.close();                }catch(IOException e1) {                }            }        }    }     /**     * 随机读取文件内容     *     * @param fileName     *            文件名     */    publicstatic void readFileByRandomAccess(String fileName) {        RandomAccessFile randomFile = null;        try{            System.out.println("随机读取一段文件内容:");            // 打开一个随机访问文件流,按只读方式            randomFile = newRandomAccessFile(fileName, "r");            // 文件长度,字节数            longfileLength = randomFile.length();            // 读文件的起始位置            intbeginIndex = (fileLength > 4) ? 4: 0;            // 将读文件的开始位置移到beginIndex位置。            randomFile.seek(beginIndex);            byte[] bytes = newbyte[10];            intbyteread = 0;            // 一次读10个字节,如果文件内容不足10个字节,则读剩下的字节。            // 将一次读取的字节数赋给byteread            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 e1) {                }            }        }    }     /**     * 显示输入流中还剩的字节数     *     * @param in     */    privatestatic void showAvailableBytes(InputStream in) {        try{            System.out.println("当前字节输入流中的字节数为:"+ in.available());        }catch(IOException e) {            e.printStackTrace();        }    }     publicstatic void main(String[] args) {        String fileName = "C:/temp/newTemp.txt";        // ReadFromFile.readFileByBytes(fileName);        // /ReadFromFile.readFileByChars(fileName);        // ReadFromFile.readFileByLines(fileName);        // ReadFromFile.readFileByRandomAccess(fileName);    }     /**     * A方法追加文件:使用RandomAccessFile     *     * @param fileName     *            文件名     * @param content     *            追加的内容     */    publicstatic void appendMethodA(String fileName, String content) {        try{            // 打开一个随机访问文件流,按读写方式            RandomAccessFile randomFile = newRandomAccessFile(fileName, "rw");            // 文件长度,字节数            longfileLength = randomFile.length();            // 将写文件指针移到文件尾。            randomFile.seek(fileLength);            randomFile.writeBytes(content);            randomFile.close();        }catch(IOException e) {            e.printStackTrace();        }    }     /**     * B方法追加文件:使用FileWriter     *     * @param fileName     * @param content     */    publicstatic void appendMethodB(String fileName, String content) {        try{            // 打开一个写文件器,构造函数中的第二个参数true表示以追加形式写文件            FileWriter writer = newFileWriter(fileName, true);            writer.write(content);            writer.close();        }catch(IOException e) {            e.printStackTrace();        }    }     publicstatic void main1(String[] args) {        String fileName = "C:/temp/newTemp.txt";        String content = "new append!";        // 按方法A追加文件        // AppendToFile.appendMethodA(fileName, content);        // AppendToFile.appendMethodA(fileName, "append end. n");        // 显示文件内容        // ReadFromFile.readFileByLines(fileName);        // 按方法B追加文件        // AppendToFile.appendMethodB(fileName, content);        // AppendToFile.appendMethodB(fileName, "append end. n");        // 显示文件内容        // ReadFromFile.readFileByLines(fileName);    }}

0 0