使用InputStream和Bufferreader读取txt文件,缺少一半的行

时间:2017-03-20 00:22:14

标签: java

我正在测试一个更大的程序的一部分,所以这就是因为这样构造它看起来有点不合逻辑。我使用的代码相当简单,但我不明白为什么前半部分的行该文件完全丢失,根本没有阅读。

public class Trying {

   public static String myReader(){
        StringBuilder buf = new StringBuilder();
        BufferedReader in = null;
        String str = null;
        try {
            InputStream is = new FileInputStream("c:/themap.txt");
            in = new BufferedReader(new InputStreamReader(is));


            while ((str = in.readLine()) != null) {
                buf.append(str);
                //buf.append(System.getProperty("line.separator"));

                System.out.println(str);
            }

            in.close();

        }
        catch (IOException e) {
            e.printStackTrace();
        }

        return buf.toString();
    }


public static void main(String[] args) {

    String fmap = myReader();

    //System.out.println(fmap);

正如你所看到的,我在函数中有一个基本的println只是为了看看发生了什么,并且根本没有显示第一行。正在读取文件的其余部分。也许它与5000行长的文件有关。任何帮助,将不胜感激。

文件的行看起来像这样

o AE_Cube.014
v 4.996883 0.000000 -0.663325
v 4.996883 0.336000 -0.663325
v 4.490770 0.000000 -1.013470
v 4.490770 0.336000 -1.013470
v 4.990770 0.000000 -1.070477
v 4.990770 0.336000 -1.070477
v 4.589172 0.000000 -1.269103

他们都是这样的。它们不会在中间改变为其他格式

我得到的输出是相同的,但缺少文件的前1/3。

f 650//652 654//652 653//652
f 649//653 651//653 654//653
f 648//654 649//654 650//654
f 651//655 647//655 648//655
f 652//656 648//656 650//656
f 650//657 649//657 654//657
f 649//658 647//658 651//658
f 648//654 647//654 649//654
o DV_Cube.059
v -1.593174 0.150000 -2.197537
v -1.617969 0.150000 -2.297979
v -1.494583 0.150000 -2.229900
v -1.525588 0.150000 -2.324470
v -1.593001 0.000000 -2.199192
v -1.616714 0.000000 -2.297979
v -1.526114 0.000000 -2.324543
v -1.495018 0.000000 -2.229900

2 个答案:

答案 0 :(得分:0)

显然代码工作正常。我的错误是没有在Eclipse中禁用控制台限制并且它显示不完整的字符串导致我恐慌。

感谢EJP和Maarten Bodewes。

答案 1 :(得分:-1)

这应该有用。

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

public class Test {

public Test() {

}

public static void main(String [] args) throws IOException{

    File file = new File("myFile");
    ArrayList <String> myText = new ArrayList<String>();
    StringBuilder myTextString = new StringBuilder();

    try {
        FileReader fr = new FileReader(file);
        BufferedReader br = new BufferedReader(fr);

        String line;

        while((line = br.readLine()) != null){
            myText.add(line);
            myTextString.append(line + " ");
        }

    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    System.out.println(myText);
    System.out.println(myTextString);
}

}

在示例中,我展示了填充数组或仅使用stringbuilder构建String的方法