黑马程序员技术交流社区

标题: 如何最简单地按行读取txt文件 [打印本页]

作者: 温暖的小白    时间: 2013-4-11 09:31
标题: 如何最简单地按行读取txt文件
br = new BufferedReader(new InputStreamReader(new FileInputStream("b.txt")));
然后
br.readLine();这样可以读取一行

但我觉得这样太复杂了,又是BufferedReader、InputStreamReader还有FileInputStream

我只想知道,如何非常简单地读取一行。
不知道FileReader可以不可以。

作者: 我手心里的宝    时间: 2013-4-11 09:39
如果是纯文本文档,就是采用FileReader呀
FileReader fr = new FileReader("b.txt");
fr.readLine();这样就可以了呀
你没有看字符流吗,毕老师有讲呀
作者: 梁航斌    时间: 2013-4-11 09:49
new InputStreamReader();是转换成字节流,若果已经确定只传字符的话就没必要转换了,用FileReader就可以了,不过BufferedReader要高效,他有缓冲区。
所以这种时候就不要省了。
作者: 赵晓东    时间: 2013-4-11 09:51
楼上是在开玩笑嘛?FileReader没有readLine方法吧
首先要确定你读取的是文本文件,然后这样就可以了
BufferedReader br = new BufferedReader(new FileReader("文件路径"));
String line = null;
while((line = br.readLine()) != null)
{
   System.out.println(line);
}
作者: 李大伟    时间: 2013-4-11 11:40
本帖最后由 李大伟 于 2013-4-11 12:36 编辑

同意楼上的,首先得确定读取的文本路径,读和写一个道理
这个是照老师讲的 写的
//定义一个FileReader 用来读取F:\\buf.txt 中字符流
FileReader fr = new FileReader("F:\\buf.txt");

//因为要读一行 ,需要调用BufferedReader 中 readLine 方法,并且提高效率,所以 定义 BufferedReader 读取 fr
BufferedReader bufr =new BufferedReader(fr);

//定义一个空的 字符串用来存放 读一行的方法
String line = null;

//初始化计数器
int count =1;
//一行一行的 循环读取
while((line=bufr.readLine())!=null){
                         //循环输出每行的内容   
                         System.out.println("读取到a.txt第"+count+"内容是:"+line);
                          count++;                        
                }
作者: 刘林虎    时间: 2013-4-11 11:58
  1. String name = "abc.java.txt";

  2. String extName = name.substring(name.lastIndexOf(".") + 1);//扩展名
  3. System.out.println(extName);
复制代码
这个很简单那
作者: 杨杨    时间: 2013-4-11 12:07
本帖最后由 杨杨 于 2013-4-11 12:11 编辑

只要封装到BufferRead 缓冲流中就能安行读了其他都是浮云啊
FileRead内部就是封装的InputStream
  public FileReader(String fileName) throws FileNotFoundException {
super(new FileInputStream(fileName));
    }这是我跟踪的源码
他们的区别就是能否指定编码如
直接用BufferRead 封装FileReader就可以

作者: Sword    时间: 2013-4-11 12:25
  1. package com.itheima;

  2. /**
  3. * 第七题: 编写程序获取已知文件的扩展名.
  4. * 注意: abc.txt的扩展名是txt, abc.java.txt的扩展名也是txt.
  5. *@author Sword
  6. */

  7. import java.io.File;
  8. import java.io.IOException;

  9. public class Test7 {
  10.         public static void main(String args[]) {
  11.                 //创建file对象,读入abc.txt
  12.                 File file = new File("abc.txt");
  13.                 File file1 = new File("abc.java.txt");
  14.                
  15.                 if (!file.exists()) {
  16.                         //try-catch抛出异常
  17.                         try {
  18.                                 file.createNewFile();
  19.                         } catch (IOException e) {
  20.                                 e.printStackTrace();
  21.                         }
  22.                 }
  23.                 //获取file的文件名,赋值给fname
  24.                 String fname = file.getName();
  25.                 String fname1 = file1.getName();
  26.                 //用substring截取文件名,lastIndexOf(".")是从最后一个.开始,长度为length的字符作为后缀名
  27.                 System.out.println(fname + ":扩展名是:"
  28.                                 + fname.substring(fname.lastIndexOf(".") + 1, fname.length()));
  29.                 System.out.println(fname1 + ":扩展名是:"
  30.                                 + fname.substring(fname.lastIndexOf(".") + 1, fname.length()));
  31.         }
  32. }
复制代码
代码和注释已经给出,希望对你有帮助
作者: 王军行    时间: 2013-4-11 12:31
貌似Scanner类有简单的方法,你去看看API的uitl包的Scanner类,我看好多人用这个类,可以扫描流和文件,功能横强大
作者: 符立波    时间: 2013-4-11 12:46
学习了....
作者: 黄玉昆    时间: 2013-4-11 19:47
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢
作者: 蓝色骨头    时间: 2013-4-11 21:43
FileReader没有readline方法
  1.         public static void main(String[] args) throws IOException
  2.         {
  3.                 //创建一个读取流对象和文件相关联。
  4.                 FileReader fr = new FileReader("buf.txt");

  5.                 //为了提高效率。加入缓冲技术。将字符读取流对象作为参数传递给缓冲对象的构造函数。
  6.                 BufferedReader bufr = new BufferedReader(fr);
  7.                
  8.                 String line = null;

  9.                 while((line=bufr.readLine())!=null)
  10.                 {
  11.                         System.out.print(line);
  12.                 }
  13.                
  14.                 bufr.close();
  15.         }
复制代码
使用javaIO是需要考虑的。

1.      根据数据类型选择相应的流体系。

2.      根据数据类型选择相应的输入输出流对象。

3.      是否需要在字节流和字符流之间转换。

4.      根据需要使用修饰器提高效率或使用方便的功能选择过滤器。
作者: 朱德帅    时间: 2013-4-11 22:43
  1. import java.util.*;
  2. import java.io.*;
  3. class Test1
  4. {
  5.         public static void main(String[] args) throws Exception
  6.         {
  7.                 //定义一个文件扫描器
  8.                 Scanner s = new Scanner(new File("f:/java/1.java"));
  9.                 //和遍历集合很像,一行一行遍历
  10.                 while(s.hasNextLine()){
  11.                         String line  = s.nextLine();
  12.                         System.out.println(line);
  13.                 }

  14.         }
  15. }
复制代码

作者: 王大斌    时间: 2013-4-11 22:53
使用打印流
PrintWriter

你去查看一下jdk中的用法




作者: xtfgq    时间: 2013-4-11 23:00
谢谢楼主,深受启发
作者: 贾振凯    时间: 2013-4-11 23:48
本帖最后由 贾振凯 于 2013-4-11 23:52 编辑
王军行 发表于 2013-4-11 12:31
貌似Scanner类有简单的方法,你去看看API的uitl包的Scanner类,我看好多人用这个类,可以扫描流和文件,功 ...


:handshake
Scanner(FileInputStream fis)//不用转换流!
hasNextLong()
nextLine()
该方法返回的内容也不包括结尾处的行分隔符





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2