从文件数组中读取文件

时间:2014-08-13 14:17:09

标签: java arrays file file-io bufferedinputstream

我是Java的新手并且正在尝试从java中读取文件,但我似乎无法弄清楚为什么会发生这种情况。当我尝试读取文件时,我收到了IOExceptions和错误。我只是不喜欢BufferedReader处理文件读取的方式。我不明白它的目的是什么。我听到一位朋友提到BufferedInputStream来读取文件数组中的文件和文件。

问题:如何正确地从文件数组中读取多个文件?

评论:我意识到没有代码看起来没有任何努力,但无论我多久盯着java文档,它对我来说都没有意义。我想知道是否有人可以做一个例子,我可以研究BufferedStreams的代码。从我做过的小研究中,我更喜欢它的外观,并且描述更好,但我该如何实际做到这一点?

2 个答案:

答案 0 :(得分:0)

我想再告诉你一件事,如果你使用的是高达7.0的java版本,你必须使用try-with-resource。而使用PrintWriter代替BufferedReader会更容易。

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class ReadListOfFiles {

    public static void main(String[] args) {
        try {
            File[] listOfFiles = {
                new File("file1.txt"),
                new File("file2.dat")
            };

            int val;
            for (File file : listOfFiles) {
                FileInputStream fis = null;
                BufferedInputStream bis = null;

                try {
                    fis = new FileInputStream(file);
                    bis = new BufferedInputStream(fis);
                    // When end of file is found in file -1 will be returned and loop will terminate.
                    while ((val = bis.read()) != -1) {
                        System.out.println((char) val);
                    }
                } catch (IOException ex) {
                    System.out.println("Error in reading " + file + " file : " + ex);
                } finally {
                    if (fis != null) {
                        fis.close();
                    }
                    if (bis != null) {
                        bis.close();
                    }
                }
            }
        } catch (Exception ex) {
            System.out.println("Error : " + ex);
        }
    }
}

答案 1 :(得分:-1)

使用我的Generic readFile类。我修改它来读取文件数组。它使用BufferedInputStream,它需要一个FileInputStream。 DataInputStream将BufferedInputStream作为参数,因此您还需要DataInputStream。我不确定如何直接回答你的问题...它相当普遍,但我希望这能帮到你。

import java.io.*;

public class Foo 
{

    public void readFile(File[] myFile) 
    {

       FileInputStream fiStream = null;
       BufferedInputStream biStream = null;
       DataInputStream diStream = null;
       foreach(File file in myFile)
       {

           try 
           {
               fiStream = new FileInputStream(file);

               biStream = new BufferedInputStream(fiStream);
               diStream = new DataInputStream(biStream);

               while (dis.available() != 0) 
               {
                System.out.println(dis.readLine());
               }

           } catch (IOException e)
           {
               e.printStackTrace();
           } finally 
           {
              try 
              {
                  fiStream.close();
                  biStream.close();
                  diStream.close();
              } catch (IOException ex)
              {
                  ex.printStackTrace();
              }
           }
       }
    }
}