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


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

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("输入错误字符或程序出错");
               }
           }
       }
    }

在这里特别感谢作者张涛.
时间: 2024-10-07 12:50:58

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

java中读取一个文件一中的内容,这个文件的每行都是一个词,在文件二中查找文件一中词出现的次数

问题描述 java中读取一个文件一中的内容,这个文件的每行都是一个词,在文件二中查找文件一中词出现的次数 String lineTxt1 = new String(); String lineTxt2 = new String(); while((lineTxt1 = bufferedReader1.readLine()) != null) { while((lineTxt2 = bufferedReader2.readLine()) != null){ if(lineTxt2.indexOf(

Python文件操作,open读写文件,追加文本内容实例_python

1.open使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. file_object = open('thefile.txt') try: all_the_text = file_object.read( ) finally: file_object.close( ) 注:不能把open语句放在try块里,因为当打开文件出现异常时,文件对象file_object无法执行close()方法. 2.读文件读文本文件input

java 多种方式判断文件是否为图片

在很多时间我们需要判断一个文件是否为图片,再或者我们需要获取一个文件的类型是否为我们需要的(这种场景在上传文件接收的时候,非常必要) 方式一:使用ImageIO 判断图片宽高 public static boolean isImage(InputStream inputStream) { if (inputStream == null) { return false; } Image img; try { img = ImageIO.read(inputStream); return !(img

java实现合并2个文件中的内容到新文件中_java

编写一个程序 将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中 a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔. 复制代码 代码如下: package javase.arithmetic; import com.google.common.base.Charsets; import com.google.common.base.Joiner; import com.google.common.base.Splitter; import com.

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

本来是要在Android端生成doc的(这需求...),最后方法没有好的方法能够在Android上做到完美,最后还是只能搬迁到服务器.不浪费,还是记录下各框架不支持Android的原因以及他们的特点.Java相关的这类框架还是很多的,有几个还不错,可惜要么不支持Android,要么要收费还价格不低.  经过亲自测试,Android不支持Java的awt很多包不能直接在Android上用,FreeMarker挺不错的,能生成复杂漂亮的doc,可惜不支持Android.用POI在Android上能运

Java创建文件且写入内容的方法_java

前两天在项目中因为要通过http请求获取一个比较大的json数据(300KB左右)并且保存,思来想去,最后还是决定将获取到的json数据以文件的形式保存下来,每次使用的时候去读取文件就可以了. 废话不多说了,直接上代码. 以下是代码截图,文章结尾会有完成的代码文件可供下载. 创建文件方法: 写入文件内容方法: 删除文件方法: 测试: 关于文件创建,写入内容,删除.可以根据自己的情况再稍作修改. 以下是代码类. package com.file.run; import java.io.Buffer

ASP.NET创建文件并写入内容

asp.net|创建 在ASP.NET中,文件处理的整个过程都是围绕着System.IO 这个名称空间展开的.这个名称空间中具有执行文件读.写所需要的类.本文从最基本的操作开始,解释在ASP.NET中文件处理的概念,包括如从一个文件中读取内容.如何向一个文件中写入内容和如何删除一个文件. 前面已经提到,要想在ASP.NET 页面中进行文件处理,必须要有"System.IO"名称空间.所以,第一步就是引入这个名称空间: <%@ Import Namespace="Syst

在android开发中进行数据存储与访问的多种方式介绍_Android

数据存储与访问 很多时候我们的软件需要对处理后的数据进行存储或再次访问.Android为数据存储提供了多种方式,分别有如下几种: 文件 SharedPreferences SQLite数据库 内容提供者(Content provider) 网络 使用文件进行数据存储 首先给大家介绍使用文件如何对数据进行存储,Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的. 复制代码 代码如下: public clas

为什么java 用IO流读docx文件里的内容打印在控制台是乱码

问题描述 importjava.io.BufferedReader;importjava.io.File;importjava.io.FileNotFoundException;importjava.io.FileReader;importjava.io.IOException;importjava.io.Reader;importjava.util.regex.Matcher;importjava.util.regex.Pattern;publicclassLinx{publicstaticv