一、多种方式读文件内容。

1、按字节读取文件内容
2、按字符读取文件内容
3、按行读取文件内容
4、随机读取文件内容
import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.RandomAccessFile;
    import java.io.Reader;
    public class ReadFromFile {
    /**
       * 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。
       * @param fileName 文件的名
       */
    public static void readFileByBytes(String fileName){
       File file = new File(fileName);
       InputStream in = null;
       try {
        System.out.println("以字节为单位读取文件内容,一次读一个字节:");
        // 一次读一个字节
        in = new FileInputStream(file);
        int tempbyte;
        while((tempbyte=in.read()) != -1){
         System.out.write(tempbyte);
        }
        in.close();
       } catch (IOException e) {
        e.printStackTrace();
        return;
       }
       try {
        System.out.println("以字节为单位读取文件内容,一次读多个字节:");
        //一次读多个字节
        byte[] tempbytes = new byte[100];
        int byteread = 0;
        in = new FileInputStream(fileName);
        ReadFromFile.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 文件名
       */
    public static void readFileByChars(String fileName){
       File file = new File(fileName);
       Reader reader = null;
       try {
        System.out.println("以字符为单位读取文件内容,一次读一个字节:");
        // 一次读一个字符
        reader = new InputStreamReader(new FileInputStream(file));
        int tempchar;
        while ((tempchar = reader.read()) != -1){
         //对于windows下,\r\n这两个字符在一起时,表示一个换行。
         //但如果这两个字符分开显示时,会换两次行。
         //因此,屏蔽掉\r,或者屏蔽\n。否则,将会多出很多空行。
         if (((char)tempchar) != ''\r''){
          System.out.print((char)tempchar);
         }
        }
        reader.close();
       } catch (Exception e) {
        e.printStackTrace();
       }
       try {
        System.out.println("以字符为单位读取文件内容,一次读多个字节:");
        //一次读多个字符
        char[] tempchars = new char[30];
        int charread = 0;
        reader = new InputStreamReader(new FileInputStream(fileName));
        //读入多个字符到字符数组中,charread为一次读取字符数
        while ((charread = reader.read(tempchars))!=-1){
         //同样屏蔽掉\r不显示
         if ((charread == tempchars.length)&&(tempchars[tempchars.length-1] != ''\r'')){
          System.out.print(tempchars);
         }else{
          for (int i=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 文件名
       */
    public static void readFileByLines(String fileName){
       File file = new File(fileName);
       BufferedReader reader = null;
       try {
        System.out.println("以行为单位读取文件内容,一次读一整行:");
        reader = new BufferedReader(new FileReader(file));
        String tempString = null;
        int line = 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 文件名
       */
    public static void readFileByRandomAccess(String fileName){
       RandomAccessFile randomFile = null;
       try {
        System.out.println("随机读取一段文件内容:");
        // 打开一个随机访问文件流,按只读方式
        randomFile = new RandomAccessFile(fileName, "r");
        // 文件长度,字节数
        long fileLength = randomFile.length();
        // 读文件的起始位置
        int beginIndex = (fileLength > 4) ? 4 : 0;
        //将读文件的开始位置移到beginIndex位置。
        randomFile.seek(beginIndex);
        byte[] bytes = new byte[10];
        int byteread = 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
       */
    private static void showAvailableBytes(InputStream in){
       try {
        System.out.println("当前字节输入流中的字节数为:" + in.available());
       } catch (IOException e) {
        e.printStackTrace();
       }
    }

    public static void main(String[] args) {
       String fileName = "C:/temp/newTemp.txt";
       ReadFromFile.readFileByBytes(fileName);
       ReadFromFile.readFileByChars(fileName);
       ReadFromFile.readFileByLines(fileName);
       ReadFromFile.readFileByRandomAccess(fileName);
    }
    }

二、将内容追加到文件尾部
import java.io.FileWriter;
    import java.io.IOException;
    import java.io.RandomAccessFile;

    /**
    * 将内容追加到文件尾部
    */
    public class AppendToFile {

    /**
       * A方法追加文件:使用RandomAccessFile
       * @param fileName 文件名
       * @param content 追加的内容
       */
    public static void appendMethodA(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();
       }
    }
    /**
       * B方法追加文件:使用FileWriter
       * @param fileName
       * @param content
       */
    public static void appendMethodB(String fileName, String content){
       try {
        //打开一个写文件器,构造函数中的第二个参数true表示以追加形式写文件
        FileWriter writer = new FileWriter(fileName, true);
        writer.write(content);
        writer.close();
       } catch (IOException e) {
        e.printStackTrace();
       }
    }

    public static void main(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);
    }
    }

三文件的各种操作类

import java.io.*;

    /**
    * FileOperate.java
    * 文件的各种操作
    * @author 杨彩 http://blog.sina.com.cn/m/yangcai
    * 文件操作 1.0
    */

    public class FileOperate
    {

       public FileOperate()
       {
       }
       /**
          * 新建目录
          */
       public void newFolder(String folderPath)
       {
           try
           {
               String filePath = folderPath;
               filePath = filePath.toString();
               File myFilePath = new File(filePath);
               if(!myFilePath.exists())
               {
                   myFilePath.mkdir();
               }
               System.out.println("新建目录操作 成功执行");
           }
           catch(Exception e)
           {
               System.out.println("新建目录操作出错");
               e.printStackTrace();
           }
       }
       /**
          * 新建文件
          */
       public void newFile(String filePathAndName, String fileContent)
       {
           try
           {
               String filePath = filePathAndName;
               filePath = filePath.toString();
               File myFilePath = new File(filePath);
               if (!myFilePath.exists())
               {
                   myFilePath.createNewFile();
               }
               FileWriter resultFile = new FileWriter(myFilePath);
               PrintWriter myFile = new PrintWriter(resultFile);
               String strContent = fileContent;
               myFile.println(strContent);
               resultFile.close();
               System.out.println("新建文件操作 成功执行");
           }
           catch (Exception e)
           {
               System.out.println("新建目录操作出错");
               e.printStackTrace();
           }
       }
       /**
          * 删除文件
          */
       public void delFile(String filePathAndName)
       {
           try
           {
               String filePath = filePathAndName;
               filePath = filePath.toString();
               File myDelFile = new File(filePath);
               myDelFile.delete();
               System.out.println("删除文件操作 成功执行");
           }
           catch (Exception e)
           {
               System.out.println("删除文件操作出错");
               e.printStackTrace();
           }
       }
       /**
          * 删除文件夹
          */
       public void delFolder(String folderPath)
       {
           try
           {
               delAllFile(folderPath); //删除完里面所有内容
               String filePath = folderPath;
               filePath = filePath.toString();
               File myFilePath = new File(filePath);
               if(myFilePath.delete()) { //删除空文件夹
               System.out.println("删除文件夹" + folderPath + "操作 成功执行");
    } else {
                   System.out.println("删除文件夹" + folderPath + "操作 执行失败");
    }
           }
           catch (Exception e)
           {
               System.out.println("删除文件夹操作出错");
               e.printStackTrace();
           }
       }
       /**
          * 删除文件夹里面的所有文件
          * @param path String 文件夹路径 如 c:/fqf
          */
       public void delAllFile(String path)
       {
           File file = new File(path);
           if(!file.exists())
           {
               return;
           }
           if(!file.isDirectory())
           {
               return;
           }
           String[] tempList = file.list();
           File temp = null;
           for (int i = 0; i < tempList.length; i++)
           {
               if(path.endsWith(File.separator))
               {
                   temp = new File(path + tempList[i]);
               }
               else
               {
                   temp = new File(path + File.separator + tempList[i]);
               }
               if (temp.isFile())
               {
                   temp.delete();
               }
               if (temp.isDirectory())
               {
                   //delAllFile(path+"/"+ tempList[i]);//先删除文件夹里面的文件
                   delFolder(path+ File.separatorChar + tempList[i]);//再删除空文件夹
               }
           }
           System.out.println("删除文件操作 成功执行");
       }
       /**
          * 复制单个文件
          * @param oldPath String 原文件路径 如:c:/fqf.txt
          * @param newPath String 复制后路径 如:f:/fqf.txt
          */
       public void copyFile(String oldPath, String newPath)
       {
           try
           {
               int bytesum = 0;
               int byteread = 0;
               File oldfile = new File(oldPath);
               if (oldfile.exists())
               {
                   //文件存在时
                   InputStream inStream = new FileInputStream(oldPath); //读入原文件
                   FileOutputStream fs = new FileOutputStream(newPath);
                   byte[] buffer = new byte[1444];
                   while ( (byteread = inStream.read(buffer)) != -1)
                   {
                       bytesum += byteread; //字节数 文件大小
                       System.out.println(bytesum);
                       fs.write(buffer, 0, byteread);
                   }
                   inStream.close();
               }
               System.out.println("删除文件夹操作 成功执行");
           }
           catch (Exception e)
           {
               System.out.println("复制单个文件操作出错");
               e.printStackTrace();
           }
       }
       /**
          * 复制整个文件夹内容
          * @param oldPath String 原文件路径 如:c:/fqf
          * @param newPath String 复制后路径 如:f:/fqf/ff
          */
       public void copyFolder(String oldPath, String newPath)
       {
           try
           {
               (new File(newPath)).mkdirs(); //如果文件夹不存在 则建立新文件夹
               File a=new File(oldPath);
               String[] file=a.list();
               File temp=null;
               for (int i = 0; i < file.length; i++)
               {
                   if(oldPath.endsWith(File.separator))
                   {
                       temp=new File(oldPath+file[i]);
                   }
                   else
                   {
                       temp=new File(oldPath+File.separator+file[i]);
                   }
                   if(temp.isFile())
                   {
                       FileInputStream input = new FileInputStream(temp);
                       FileOutputStream output = new FileOutputStream(newPath + "/" +
                       (temp.getName()).toString());
                       byte[] b = new byte[1024 * 5];
                       int len;
                       while ( (len = input.read(b)) != -1)
                       {
                           output.write(b, 0, len);
                       }
                       output.flush();
                       output.close();
                       input.close();
                   }
                   if(temp.isDirectory())
                   {
                       //如果是子文件夹
                       copyFolder(oldPath+"/"+file[i],newPath+"/"+file[i]);
                   }
               }
               System.out.println("复制文件夹操作 成功执行");
           }
           catch (Exception e)
           {
               System.out.println("复制整个文件夹内容操作出错");
               e.printStackTrace();
           }
       }
       /**
          * 移动文件到指定目录
          * @param oldPath String 如:c:/fqf.txt
          * @param newPath String 如:d:/fqf.txt
          */
       public void moveFile(String oldPath, String newPath)
       {
           copyFile(oldPath, newPath);
           delFile(oldPath);
       }
       /**
          * 移动文件到指定目录
          * @param oldPath String 如:c:/fqf.txt
          * @param newPath String 如:d:/fqf.txt
          */
       public void moveFolder(String oldPath, String newPath)
       {
           copyFolder(oldPath, newPath);
           delFolder(oldPath);
       }
       public static void main(String args[])
       {
           String aa,bb;
           boolean exitnow=false;
           System.out.println("使用此功能请按[1] 功能一:新建目录");
           System.out.println("使用此功能请按[2] 功能二:新建文件");
           System.out.println("使用此功能请按[3] 功能三:删除文件");
           System.out.println("使用此功能请按[4] 功能四:删除文件夹");
           System.out.println("使用此功能请按[5] 功能五:删除文件夹里面的所有文件");
           System.out.println("使用此功能请按[6] 功能六:复制文件");
           System.out.println("使用此功能请按[7] 功能七:复制文件夹的所有内容");
           System.out.println("使用此功能请按[8] 功能八:移动文件到指定目录");
           System.out.println("使用此功能请按[9] 功能九:移动文件夹到指定目录");
           System.out.println("使用此功能请按[10] 退出程序");
           while(!exitnow)
           {
               FileOperate fo=new FileOperate();
               try
               {
                   BufferedReader Bin=new BufferedReader(new InputStreamReader(System.in));
                   String a=Bin.readLine();
                   int b=Integer.parseInt(a);
                   switch(b)
                   {
                       case 1:System.out.println("你选择了功能一 请输入目录名");
                       aa=Bin.readLine();
                       fo.newFolder(aa);
                       break;
                       case 2:System.out.println("你选择了功能二 请输入文件名");
                       aa=Bin.readLine();
                       System.out.println("请输入在"+aa+"中的内容");
                       bb=Bin.readLine();
                       fo.newFile(aa,bb);
                       break;
                       case 3:System.out.println("你选择了功能三 请输入文件名");
                       aa=Bin.readLine();
                       fo.delFile(aa);
                       break;
                       case 4:System.out.println("你选择了功能四 请输入文件名");
                       aa=Bin.readLine();
                       fo.delFolder(aa);
                       break;
                       case 5:System.out.println("你选择了功能五 请输入文件名");
                       aa=Bin.readLine();
                       fo.delAllFile(aa);
                       break;
                       case 6:System.out.println("你选择了功能六 请输入文件名");
                       aa=Bin.readLine();
                       System.out.println("请输入目标文件名");
                       bb=Bin.readLine();
                       fo.copyFile(aa,bb);
                       break;
                       case 7:System.out.println("你选择了功能七 请输入源文件名");
                       aa=Bin.readLine();
                       System.out.println("请输入目标文件名");
                       bb=Bin.readLine();
                       fo.copyFolder(aa,bb);
                       break;
                       case 8:System.out.println("你选择了功能八 请输入源文件名");
                       aa=Bin.readLine();
                       System.out.println("请输入目标文件名");
                       bb=Bin.readLine();
                       fo.moveFile(aa,bb);
                       break;
                       case 9:System.out.println("你选择了功能九 请输入源文件名");
                       aa=Bin.readLine();
                       System.out.println("请输入目标文件名");
                       bb=Bin.readLine();
                       fo.moveFolder(aa,bb);
                       break;
                       case 10:exitnow=true;
                       System.out.println("程序结束,请退出");
                       break;
                       default:System.out.println("输入错误.请输入1-10之间的数");
                   }
                   System.out.println("请重新选择功能");
               }
               catch(Exception e)
               {
                   System.out.println("输入错误字符或程序出错");
               }
           }
       }
    }

在这里特别感谢作者张涛.

Java多种方式读文件,追加文件内容,等对文件的各种操作的更多相关文章

  1. java中多种方式读文件

    转自:http://www.jb51.net/article/16396.htm java中多种方式读文件 一.多种方式读文件内容. 1.按字节读取文件内容 2.按字符读取文件内容 3.按行读取文件内 ...

  2. bat给文件追加换行内容

    如果有很多文件怎么给文件结尾追加换行内容呢? bat似乎没有专门的换行符,要实现似乎只能echo一下 set filename="123.txt" echo.>>%fi ...

  3. [JAVA 多种方式读取文件]

    package com.file; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream ...

  4. Java多种方式动态生成doc文档

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/5280272.html 本来是要在Android端生成doc的(这需求...),最后方法没有好的方法能够在An ...

  5. c# 复制整个文件夹的内容,Copy所有文件

    /// <summary> /// 文件夹下所有内容copy /// </summary> /// <param name="SourcePath"& ...

  6. txt文件每行内容与图片文件名字组合,输出txt格式

    import os dir_list = os.listdir('C:\\Users\\10107472\\Desktop\\practice\\JPEGImages')i=0f1=open('C:\ ...

  7. 【转载】 C#往文件中追加文本内容信息

    在C#的文件相关操作中,往已有的文件中追加相关内容信息也是常有的操作,例如我们在写网站日志文件的时候,很多时候是1天的日志存放在一个txt文件中,此时就涉及到往原有文件中追加写入文本内容信息,追加文本 ...

  8. 向txt文件中写入内容(覆盖重写与在末尾续写+FileOutputStream与FileWriter)(转发:https://blog.csdn.net/bestcxx/article/details/51381460)

    !!!! 读取txt文件中的内容 import java.io.BufferedReader; import java.io.File; import java.io.FileReader; /** ...

  9. Linux之指令 重定向 文件覆盖>和文件追加>>

    指令>和>>区别 指令 > : 如果文件存在,将原来文件的内容覆盖:原文件不存在则创建文件,再添加信息. 指令 >>:不会覆盖原文件内容,将内容追加到文件的尾部. ...

随机推荐

  1. Jenkins的关闭、重启

    以前一直用从cmd进入jenkins的安装目录,执行jenkins stop/start,但是新的jenkins有更加方便功能 关闭jenkins服务 只需要在访问jenkins服务器的网址url地址 ...

  2. TP中的AJAX返回ajaxReturn()

    系统支持任何的AJAX类库,Action类提供了ajaxReturn方法用于AJAX调用后返回数据给客户端.并且支持JSON.XML和EVAL三种方式给客户端接受数据,通过配置DEFAULT_AJAX ...

  3. 【转】动态规划DP

    [数据结构与算法] DP 动态规划 介绍 原创 2017年02月13日 00:42:51 最近在看算法导论. DP全称是dynamic programming,这里programming不是编程,是一 ...

  4. 详解BLE 空中包格式—兼BLE Link layer协议解析

    BLE有几种空中包格式?常见的PDU命令有哪些?PDU和MTU的区别是什么?DLE又是什么?BLE怎么实现重传的?BLE ACK机制原理是什么?希望这篇文章能帮你回答以上问题. 虽然BLE空中包(pa ...

  5. Latex 文本编辑技巧

    临时取消首行缩进 \noindent 生成随机文本 \usepackage{lipsum} \begin{document} \lipsum \end{document} 多栏模式 \usepacka ...

  6. Picasso 完美兼容 OkHttp3.3,缓存优化两不误

    Tamic 专注移动开发!更多文章请关注http://www.jianshu.com/p/6241950f9daf csdn: http://blog.csdn.net/sk719887916/art ...

  7. Java并发框架——AQS中断的支持

    线程的定义给我们提供了并发执行多个任务的方式,大多数情况下我们会让每个任务都自行执行结束,这样能保证事务的一致性,但是有时我们希望在任务执行中取消任务,使线程停止.在java中要让线程安全.快速.可靠 ...

  8. 使用Fresco实现简单的显示一张图片

    使用Fresco实现显示一张图片 仅仅是下载一张图片,在下载完之前,先显示一张站位图 效果图 源码 下载地址(Android Studio工程):http://download.csdn.net/de ...

  9. Dynamics CRM2016 业务流程之Task Flow(二)

    接上篇,Page页设置完后,按照业务流程管理也可以继续设置Insert page after branch 或者 Add branch,我这里选择后者,并设置了条件,如果Pipeline Phase ...

  10. Android必知必会-获取View坐标和长宽的时机

    如果移动端访问不佳,请访问–>Github版 背景 最近要实现一个功能,用到了一些属性动画,需要获取一些View的坐标信息,设计图如下: 这里我使用的是DialogFragment来实现的,可以 ...