加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

使用java的输入,输出流技术将一个文本文件的内容按行读出,每读出一行就顺序添加行号,并写入到另一个

(2014-03-27 15:17:36)
标签:

文本文件

输入

输出

java

it

分类: 文本挖掘

import java.io.*;

public class FileLineNumber {
 public static void main(String[] args) throws Exception {
  appendLineNumber(new File("FileLineNumber.java"), new File("a.txt"));
 }
 
 public static void appendLineNumber(File from, File to) throws Exception {
  BufferedReader in = new BufferedReader(new FileReader(from));
  StringBuilder sb = new StringBuilder();
  String t;
  int lineNumber = 1;
  while((t = in.readLine()) != null) {
   sb.append(lineNumber + " ");
   sb.append(t);
   sb.append(System.getProperty("line.separator"));
   lineNumber++;
  }
  in.close();
  BufferedWriter out = new BufferedWriter(new FileWriter(to));
  out.write(sb.toString());
  out.close();
 }
}

注释如下: 

 

BufferedReader
public class BufferedReaderextends Reader
从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。
通常,Reader 所作的每个读取请求都会导致对底层字符或字节流进行相应的读取请求。
因此,建议用 BufferedReader 包装所有其 read() 操作可能开销很高的 Reader(如 FileReader 和 InputStreamReader)。例如,
BufferedReader in = new BufferedReader(new FileReader("foo.in"));
将缓冲指定文件的输入。如果没有缓冲,则每次调用 read() 或 readLine() 都会导致从文件中读取字节,并将其转换为字符后返回,而这是极其低效的。
通过用合适的 BufferedReader 替代每个 DataInputStream,可以对将 DataInputStream 用于文字输入的程序进行本地化。

 

readLine
public String readLine()throws IOException
读取一个文本行。通过下列字符之一即可认为某行已终止:换行 ('\n')、回车 ('\r') 或回车后直接跟着换行。
返回:
包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null

 

StringBuilder简介
如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。
在 StringBuilder 上的主要操作是 append 和 insert 方法。
每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符添加或插入到字符串生成器中。
append 方法始终将这些字符添加到生成器的末端;而 insert 方法则在指定的点添加字符。
例如,如果 z 引用一个当前内容为“start”的字符串生成器对象,则该方法调用 z.append("le") 将使字符串生成器包含“startle”,
而 z.insert(4, "le") 将更改字符串生成器,使之包含“starlet”。
通常,如果 sb 引用 StringBuilder 的实例(StringBuilder sb = new StringBuilder();),则 sb.append(x) 和 sb.insert(sb.length(), x) 具有相同的效果。
每个字符串生成器都有一定的容量。只要字符串生成器所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区。
如果内部缓冲区溢出,则此容量自动增大。 将StringBuilder的实例用于多个线程是不安全的。
如果需要这样的同步,则建议使用StringBuffer。[1]StringBuilder类可以用于在无需创建一个新的字符串对象情况下修改字符串。
StringBuilder不是线程安全的,而StringBuffer是线程安全的,但其在单线程中的性能比StringBuffer高。

 

System.getProperty("line.separator")
Java是一个跨平台的语言,因为如果想写一个跨平台的软件,有些东西就需要考虑,例如换行。
在不同的平台上,换行符可能是不同的,例如:
Mac平台:\r
Unix或Linux:\n
Windows或Http:\r\n
Unicode标准:\u2028
所以当需要换行时,通常建议使用line.separator的系统属性:System.getProperty("line.separator");
不过如果你是在写一个网络程序或者服务器程序,则需要硬编码为"\r\n",而不管所选的平台。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有