java 无损读取文本文件

Java 如何无损读取文本文件呢?

以下是有损

Java代码  

  1. @Deprecated  
  2.     public static String getFullContent(File file, String charset) {  
  3.         BufferedReader reader = null;  
  4.         if (!file.exists()) {  
  5.             System.out.println("getFullContent: file(" + file.getAbsolutePath()  
  6.                     + ") does not exist.");  
  7.             return null;  
  8.         }  
  9.         if (charset == null) {  
  10.             charset = SystemHWUtil.CHARSET_ISO88591;  
  11.         }  
  12.         try {  
  13.             reader = getBufferReaderFromFile(file, charset);  
  14.             return getFullContent(reader);  
  15.         } catch (FileNotFoundException e1) {  
  16.             e1.printStackTrace();  
  17.         } finally {  
  18.             if (null != reader) {  
  19.                 try {  
  20.                     reader.close();  
  21.                 } catch (IOException e) {  
  22.                     e.printStackTrace();  
  23.                 }  
  24.             }  
  25.         }  
  26.         return null;  
  27.     }  
  28.   
  29. public static BufferedReader getBufferReaderFromFile(File file,  
  30.             String charset) throws FileNotFoundException {  
  31.         InputStream ss = new FileInputStream(file);  
  32.         InputStreamReader ireader;  
  33.         BufferedReader reader = null;  
  34.         try {  
  35.             if (charset == null) {  
  36.                 ireader = new InputStreamReader(ss,  
  37.                         SystemHWUtil.CHARSET_ISO88591);  
  38.             } else {  
  39.                 ireader = new InputStreamReader(ss, charset);  
  40.             }  
  41.             reader = new BufferedReader(ireader);  
  42.         } catch (UnsupportedEncodingException e) {  
  43.             e.printStackTrace();  
  44.         }  
  45.   
  46.         return reader;  
  47.     }  
  48.   
  49. /** 
  50.      * have closed reader 
  51.      *  
  52.      * @param reader 
  53.      * @return 
  54.      */  
  55.     @Deprecated  
  56.     public static String getFullContent(BufferedReader reader) {  
  57.         StringBuilder sb = new StringBuilder();  
  58.         String readedLine = null;  
  59.         try {  
  60.             while ((readedLine = reader.readLine()) != null) {  
  61.                 sb.append(readedLine);  
  62.                 sb.append(SystemHWUtil.CRLF);  
  63.             }  
  64.         } catch (IOException e) {  
  65.             e.printStackTrace();  
  66.         } finally {  
  67.             try {  
  68.                 reader.close();  
  69.             } catch (IOException e) {  
  70.                 e.printStackTrace();  
  71.             }  
  72.         }  
  73.         String content = sb.toString();  
  74.         int length_CRLF = SystemHWUtil.CRLF.length();  
  75.         if (content.length() <= length_CRLF) {  
  76.             return content;  
  77.         }  
  78.         return content.substring(0, content.length() - length_CRLF);//  
  79.     }  

 测试:

Java代码  

  1. @Test  
  2.     public void test_getFullContent(){  
  3.         String filepath="D:\\bin\\config\\conf_passwd.properties";  
  4.         try {  
  5.             InputStream in =new FileInputStream(filepath);  
  6.             System.out.print(FileUtils.getFullContent(filepath, "UTF-8"));  
  7.         } catch (FileNotFoundException e) {  
  8.             e.printStackTrace();  
  9.         } catch (IOException e) {  
  10.             e.printStackTrace();  
  11.         }  
  12.     }  

 

介绍三种无损读取的方式

方式一:使用InputStreamReader,指定编码

Java代码  

  1. /*** 
  2.      * 指定字符编码,无损地读取文本文件. 
  3.      *  
  4.      * @param in 
  5.      *            : 输入流,会关闭 
  6.      * @param charset 
  7.      *            : 字符编码 
  8.      * @return 
  9.      * @throws IOException 
  10.      */  
  11.     public static String getFullContent3(InputStream in, String charset)  
  12.             throws IOException {  
  13.         StringBuffer sbuffer = new StringBuffer();  
  14.         InputStreamReader inReader;  
  15.         //设置字符编码  
  16.         inReader = new InputStreamReader(in, charset);  
  17.         char[] ch = new char[SystemHWUtil.BUFF_SIZE_1024];  
  18.         int readCount = 0;  
  19.         while ((readCount = inReader.read(ch)) != -1) {  
  20.             sbuffer.append(ch, 0, readCount);  
  21.         }  
  22.         inReader.close();  
  23.         in.close();  
  24.         return sbuffer.toString();  
  25.     }  

 测试:

Java代码  

  1. @Test  
  2.     public void test_getFullContent3(){  
  3.         String filepath="D:\\bin\\config\\conf_passwd.properties";  
  4.         try {  
  5.             InputStream in =new FileInputStream(filepath);  
  6.             System.out.print(FileUtils.getFullContent3(in, "UTF-8"));  
  7.         } catch (FileNotFoundException e) {  
  8.             e.printStackTrace();  
  9.         } catch (IOException e) {  
  10.             e.printStackTrace();  
  11.         }  
  12.     }  

 

 

方式二:先读取出字节数组,再使用String的构造方法

Java代码  

  1. public static String getFullContent4(InputStream in, String charset) throws IOException{  
  2.         byte[]bytes=FileUtils.readBytes3(in);  
  3.         return new String(bytes,charset);  
  4.     }  
  5.   
  6. /*** 
  7.      * Has been tested 
  8.      *  
  9.      * @param in 
  10.      * @return 
  11.      * @throws IOException 
  12.      */  
  13.     public static byte[] readBytes3(InputStream in) throws IOException {  
  14.         BufferedInputStream bufin = new BufferedInputStream(in);  
  15.         int buffSize = BUFFSIZE_1024;  
  16.         ByteArrayOutputStream out = new ByteArrayOutputStream(buffSize);  
  17.   
  18.         // System.out.println("Available bytes:" + in.available());  
  19.   
  20.         byte[] temp = new byte[buffSize];  
  21.         int size = 0;  
  22.         while ((size = bufin.read(temp)) != -1) {  
  23.             out.write(temp, 0, size);  
  24.         }  
  25.         bufin.close();  
  26.         in.close();  
  27.         byte[] content = out.toByteArray();  
  28.         out.flush();  
  29.         out.close();  
  30.         return content;  
  31.     }  

 

 

方式三:使用System.arraycopy,所以效率不高,因为有拷贝操作(不推荐)

Java代码  

  1. public static String getFullContent2(InputStream in, String charset)  
  2.             throws IOException {  
  3.         int step = BUFFSIZE_1024;  
  4.         BufferedInputStream bis = new BufferedInputStream(in);  
  5.   
  6.         // Data's byte array  
  7.         byte[] receData = new byte[step];  
  8.   
  9.         // data length read from the stream  
  10.         int readLength = 0;  
  11.   
  12.         // data Array offset  
  13.         int offset = 0;  
  14.   
  15.         // Data array length  
  16.         int byteLength = step;  
  17.   
  18.         while ((readLength = bis.read(receData, offset, byteLength - offset)) != -1) {  
  19.             // Calculate the current length of the data  
  20.             offset += readLength;  
  21.             // Determine whether you need to copy data , when the remaining  
  22.             // space is less than step / 2, copy the data  
  23.             if (byteLength - offset <= step / 2) {  
  24.                 byte[] tempData = new byte[receData.length + step];  
  25.                 System.arraycopy(receData, 0, tempData, 0, offset);  
  26.                 receData = tempData;  
  27.                 byteLength = receData.length;  
  28.             }  
  29.         }  
  30.   
  31.         return new String(receData, 0, offset, charset);  
  32.     }  
时间: 2024-10-28 21:23:20

java 无损读取文本文件的相关文章

如何用Ant命令读取文本文件中每行的数据了,谢谢!

问题描述 如何用Ant命令读取文本文件中每行的数据了,谢谢! 解决方案 解决方案二:没有人知道吗?谢谢!解决方案三:师兄,你好,我是今年即将加入深圳华为产品数据部的应届生,您能给我讲讲您这么多年在这个部门的感受吗?比如:工作压力.假期.待遇等等.我表示不胜感激涕零解决方案四:ant留了很多接口,你可以调用java程序,或者系统的命令来读本地文件.如果是properties文件的话,好像不用调用外部程序ant也可以load进来.去apache找doc看看吧

PHP读取文本文件并逐行输出该行使用最多的字符与对应次数的方法_php技巧

本文实例讲述了PHP读取文本文件并逐行输出该行使用最多的字符与对应次数的方法.分享给大家供大家参考,具体如下: test.txt文件: Welcome to our website jb51.net www.jb51.net php asp java jsp php代码(读取test.txt文件): $myfile = fopen("test.txt", "r"); while(!feof($myfile)) { $line_str = fgets($myfile)

使用 System.IO 和 Visual C# .NET 读取文本文件

visual 使用 System.IO 和 Visual C# .NET 读取文本文件 在 Visual C# .NET 中读取文本文件 打开和读取文件进行读取访问是输入/输出 (IO) 功能的一个非常重要的部分,即使您不需要写入到相关文件,也是如此. 本示例打开一个文件进行读取,这适用于读取文本文件,但不适用于读取二进制文件. 本示例使用多个可用于打开文件的方法之一. 虽然很多数据结构都可以用于存储从文件中检索到的信息,但是,arraylist 类是使用最简便的结构. 为了打开文件和从文件中读

在ASP.NET页中读取文本文件

asp.net 简介 在现实世界中,人们经常希望能够把某个文本文件的部分或全部内容保存到一个 Web 网页变量中.在经典的 ASP 中,只要简单地使用 FileSystemObject 就能做到了.其实,在 ASPFAQs.com 中就有一个 FAQ 栏目专门讨论 FileSystemObject . 可是在 ASP.NET 中呢?FileSystemObject 当然还可以用,不过,经验表明这么做会严重影响服务器性能.因此,最好还是使用 .NET 框架本身提供的类来读取文件.本文要介绍的是如何

ASP入门教程-读取文本文件

一.读取文本文件的步骤如下: 1.创建 FileSystemObject 对象实例: <% Set fso=Server.CreateObject("Scripting.FileSystemObject") %> 2.使用FileSystemObject对象的OpenTextFile方法返回一个 TextStream 对象实例: <% Set txtFile=fso.OpenTextFile(filename[, iomode[, create[, format]]]

java实现读取、删除文件夹下的文件

  本文给大家分享的是java实现读取.删除文件夹下的文件,其中File.delete()用于删除"某个文件或者空目录"!所以要删除某个目录及其中的所有文件和子目录,要进行递归删除,有需要的小伙伴可以参考下. java实现读取.删除文件夹下的文件 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43

详解Java程序读取properties配置文件的方法_java

在我们平时写程序的时候,有些参数是经常改变的,而这种改变不是我们预知的.比如说我们开发了一个操作数据库的模块,在开发的时候我们连接本地的数据库那么IP ,数据库名称,表名称,数据库主机等信息是我们本地的,要使得这个操作数据的模块具有通用性,那么以上信息就不能写死在程序里.通常我们的做法是用配置文件来解决. 各种语言都有自己所支持的配置文件类型.比如Python ,他支持.ini 文件.因为他内部有一个ConfigParser 类来支持.ini 文件的读写,根据该类提供的方法程序员可以自由的来操作

求大神指教-在c++控制台程序中读取文本文件

问题描述 在c++控制台程序中读取文本文件 我是新手,刚刚入门,学校安排了一个暑期项目,做一个球员信息管理系统. 把数据存储在txt文件中,怎样才可以有序的读取我要找的数据,包括球员的赛季数据个个人信息.... 解决方案 C++读取文本文件 解决方案二: 那要看你是怎么存储的数据,什么顺序存储的就怎么读.可以一个球员的信息占一行,或者xxx个字节.然后一个一个球员的读出来. 解决方案三: 最简单的,可以用json文件等来存取,这样用jsoncpp等可以方便读取,解析数据. 解决方案四: 先定义一

bat-windows 中用BAT读取文本文件乱码

问题描述 windows 中用BAT读取文本文件乱码 windows 中用BAT读取文本并在控制台显示出来,显示乱码.result.txt里面是中文. @echo off echo 正在执行,请稍后.... tesseract example1.tif result -l chi_sim for /f "delims=" %%a in (result.txt) do ( echo %%a ) @pause 解决方案 http://jingyan.baidu.com/article/ce