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

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. 使用Web Audio API绘制音波图

    摘要:Web Audio API是对<audio> 标签功能上的补充,我们可以用它完成混音.音效.平移等各种复杂的音频处理,本文简单的使用其完成音波图的绘制. PS:本例子使用ES6编程, ...

  2. VueJs(4)---V-model指令

    V-model指令 摘要   限制: v-model只能用在:<input>    <select>    <textarea>  <components&g ...

  3. 韩顺平玩转Oracle视频资料整理

    .oracle10g 11g:g(grid)表示网格技术 以baidu搜索为准,现在想使用一个软件,但是此软件在离自己非常近的地方就存在了下载地址,但是与自己非常远的地方也同样存在一个下载地址,而搜索 ...

  4. Oracle中SQL语句分类

    Oracle中SQL语句分类如下:1.DML语句 insert/delete/update/select/merge/explan plan/lock table2.DDL语句 create/atlt ...

  5. 【图文详解】Hadoop集群搭建(CentOs6.3)

    本文主要详细地描述了hadoop集群的搭建以及一些配置文件的说明,用于自己复习以及供新人学习,若有错误之处还请指出. 前期准备 先给出我的集群架构: 到hadoop官网下载好hadoop安装包http ...

  6. 关于bedtools merge 功能中sort 命令的解释

    Bedtools 是一个很好的用来处理区间的工具,很多时候用这个底层语言编写的小工具比自己写的脚本运行快很多,但是这个工具中的某些功能对输入文件有一定的要求,比如说里面的一个merge函数,这是里面的 ...

  7. Android Support库——support annotations

    Android Support库是官方出的支持扩展库,包含了丰富的组件.工具类等,通过在Android SDK Manager中勾选以下两项来获取到. 其中,Android Support Libra ...

  8. 非参数估计:核密度估计KDE

    http://blog.csdn.net/pipisorry/article/details/53635895 核密度估计Kernel Density Estimation(KDE)概述 密度估计的问 ...

  9. 20160224.CCPP体系详解(0034天)

    程序片段(01):指针与结构体.c 内容概要:指针与结构体 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include < ...

  10. Switch控件详解

    Switch控件详解 原生效果 5.x 4.x 布局 <Switch android:id="@+id/setting_switch" android:layout_widt ...