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

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. HashMap和ConcurrentHashMap实现原理及源码分析

    HashMap实现原理及源码分析 哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表, ...

  2. VUE相关资料合集

    ===官方=== https://github.com/vuejs/vue vue-components组件库 ---PC端--- https://github.com/ElemeFE/element ...

  3. python学习之路网络编程篇(第五篇)

    paramiko简介 paramiko 是基于Python实现的SSH2远程安装连接,支持认证及秘钥方式.可以实现远程命令执行.文件传输.中间SSH代理等功能. paramiko安装 #!/bin/b ...

  4. DotnetSpider (二) Downloader的设置 Request自定义数据字典

    本篇主要分享自定义Downloader和Request信息,实现自定义请求内容,及将自定义内容存储. ** 温馨提示:如需转载本文,请注明内容出处.**     本文连接:http://www.cnb ...

  5. CTR预估算法

    GBRT(Gradient Boost Regression Tree)渐进梯度回归树,XGBoost是GBRT的一个工程实现 LR(Logistics Regression )逻辑回归 Spark ...

  6. ACM KMP 格式输入导致TLE

    在写 Oulipo   POJ - 3461 时候遇上的奇怪的问题 在格式输入上不一样,提交的时候返回TLE,两段代码如下: A#include<iostream> #include< ...

  7. jQuery CSS 类

    通过 jQuery,可以很容易地对 CSS 元素进行操作. jQuery 操作 CSS jQuery 拥有若干进行 CSS 操作的方法.我们将学习下面这些: addClass() - 向被选元素添加一 ...

  8. CentOS 安装Docker

    CentOS 系列安装 Docker Docker 支持 CentOS6 及以后的版本. CentOS6 对于 CentOS6,可以使用 EPEL 库安装 Docker,命令如下 $ sudo yum ...

  9. Openstack: change endpoint IP addresses after installation

    Prerequisites You have a single node DevStack installation using mysql for the database that was wor ...

  10. Linux基础指令

    Linux基础指令 只写了最简单的一些文件操作,基本没有带参数 查看当前目录 pwd 跳转到某路径 cd 查看当前目录下的文件 ls ls -l // -l 查看详细信息 打开当前所在文件夹 open ...