zoukankan      html  css  js  c++  java
  • Java IO file文件的写入和读取及下载

    一、FileWriter 和BufferedWriter 结合写入文件

      FileWriter是字符流写入字符到文件。默认情况下,它会使用新的内容代替文件原有的所有内容,但是,当指定一个true值作为FileWriter构造函数的第二个参数,它会保留现有的内容,并追加新内容在文件的末尾。

      BufferedWriter:缓冲字符,是一个字符流类来处理字符数据。不同于字节流(数据转换成字节FileOutPutStream),可以直接写字符串、数组或字符数据保存到文件。

    默认情况,替换原有内容:   new FileWriter(file);

    保留原来的文件内容:      new FileWriter(file,true
     
    public static void writeInFileByfb() {
            File f=new File("E:\Java\jmoa\TestDiff\src\test\resource\test_fb.txt");
            String content="要写入文件的新内容";
            FileWriter fw=null;
            BufferedWriter bw=null;
            try{
                if(!f.exists()){
                    f.createNewFile();
                }
                 fw=new FileWriter(f.getAbsoluteFile(),true);  //true表示可以追加新内容  
                             //fw=new FileWriter(f.getAbsoluteFile()); //表示不追加
                 bw=new BufferedWriter(fw);
                 bw.write(content);
                 bw.close();
            }catch(Exception e){
               e.printStackTrace();
            }
            
        }

    二、FileOutPutStream 字节流写入文件

      文件输出流是一种用于处理原始二进制数据的字节流泪。 为了将数据写入到文件中,必须将数据转换为字节,并保存到文件。具体例子如下:

    package com.joyplus.test;
    
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class FileOutPutTest {
        public static void main(String[] args) {
            FileOutPutTest.writeInFileByfi();
        }
        
        
        public static void writeInFileByfi(){
            File f=new File("E:\Java\jmoa\TestDiff\src\test\resource\test_fi.txt");
            FileOutputStream fos=null;
            try {
                if(!f.exists()){
                    f.createNewFile();
                }
                 fos=new FileOutputStream(f);
                String content="要写入的新内容!";
                fos.write(content.getBytes());
            } catch (IOException e) {
                e.printStackTrace();
            }finally{
                if(fos!=null){
                    try {
                        fos.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            
        }
    }

    三、RandomAccessFile 写入文件

       RandomAccessFile的唯一父类是Object,与其他流父类不同。是用来访问那些保存数据记录的文件的,这样你就可以用seek( )方法来访问记录,并进行读写了。这些记录的大小不必相同;但是其大小和位置必须是可知的.

       如下例子是RandomAccessFile如何进行写入文件的例子:

    public static void writeInFileByRdA(){
            String content="randowAccessFile";
            try{
                  // 打开一个随机访问文件流,按读写方式
                RandomAccessFile randomFile = new RandomAccessFile("E:\Java\jmoa\TestDiff\src\test\resource\test_fb.txt", "rw");
                // 文件长度,字节数
                long fileLength = randomFile.length();
                //将写文件指针移到文件尾。
                randomFile.seek(fileLength);
                randomFile.writeBytes(content);
                randomFile.close();
            }catch(Exception e){
                e.printStackTrace();
            }
        }

    文件的读取

      一、FileInputStream 字节流读取文件 【注意:读取中文的时候会乱码】

    具体代码如下:

    //按照字节读取文件内容
        public static String readFileByByte(){
            String s="";
            File f=new File("E:\Java\jmoa\TestDiff\src\test\resource\test_fb.txt");
            InputStream in=null;
            try{
                in=new FileInputStream(f);
                int tempByte;
                while((tempByte=in.read())!=-1){
                    System.out.println(tempByte);
                    s+=tempByte;
                }
                in.close();
            }catch(Exception e){
                e.printStackTrace();
            }
            System.out.println("content:"+s);
            return s;
        }

    二、InputStreamReader 字符流读取文件内容

    //按照字符读取文件内容
        public static String readFileByChar(){
            String s="";
            File f=new File("E:\Java\jmoa\TestDiff\src\test\resource\test_fb.txt");
            Reader rdr=null;
            try{
                rdr=new InputStreamReader(new FileInputStream(f));
                int temp;
                while((temp=rdr.read())!=-1){
                    //对于window下,
    这两个字符在一起时,表示一个换行。   
                    //但是如果这两个字符分开显示时,会换两行。
                    //因此,屏蔽掉
    ,或者屏蔽掉
    。否则,将会出现很多空行
                    if(((char)temp)!='
    '){
                        s+=(char)temp;
                    }
                }
            }catch(Exception e){
                e.printStackTrace();
            }finally{
                try {
                    rdr.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            System.out.println(s);
            return s;
        }

    三、BufferedReader 以行为单位读取文件内容

    //按照行读取文件
        public static String readFileByLine(){
            String s="";
            File f=new File("E:\Java\jmoa\TestDiff\src\test\resource\test_fb.txt");
            BufferedReader br=null;
            try{
                System.out.println("按照行读取文件内容");
                br=new BufferedReader(new FileReader(f));
                String temp;
                while((temp=br.readLine())!=null){
                    s+=temp;
                }
            }catch(Exception e){
                e.printStackTrace();
            }finally{
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            System.out.println("file content:"+s);
            return s;
        }
    //随机行读取文件
        public static String readFileByRand(){
            String s="";
            File f=new File("E:\Java\jmoa\TestDiff\src\test\resource\test_fb.txt");
            RandomAccessFile raf=null;
            try{
                //打开一个文件流, 按只读方式
                raf=new RandomAccessFile(f.getName(), "r");
                //文件长度,字节数
                long fileLength=raf.length();
                //读文件的起始位置
                int beginIndex=(fileLength>4)?4:0;
                //将读文件的开始位置移到beginIndex位置
                raf.seek(beginIndex);
                byte[] bytes=new byte[10];
                int byteread=0;
                //一次读10个字节,如果文件内容不足10个字节,则读剩下的文字。
                //将一次读取的字节数赋给byteread
                while((byteread=raf.read(bytes))!=-1){
                    System.out.write(bytes,0,byteread);
                }
                
            }catch(Exception e){
                e.printStackTrace();
            }finally{
                if(raf!=null){
                    try {
                        raf.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            //System.out.println("文件内容:"+s);
            return s;
        }

    补充的文件知识:

     /**
         * 显示输入流中还剩的字节数
         */
        private static void showAvailableBytes(InputStream in) {
            try {
                System.out.println("当前字节输入流中的字节数为:" + in.available());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
  • 相关阅读:
    webpack从零的实践(新手良药)
    throttle和debounce
    call(),apply(),bind() 区别和用法
    vue 路由钩子。
    vue 兄弟组件之间的传值
    JS 面向对象封装 无限轮播 插件。
    element-ui 解决 table 里包含表单验证的问题!
    Vue.nextTick 的原理和用途
    JavaScript中基本数据类型和引用数据类型的区别
    PS批量修改照片大小
  • 原文地址:https://www.cnblogs.com/yaomajor/p/6548640.html
Copyright © 2011-2022 走看看