Java中的File和FileLoader有什么区别?

时间:2011-07-01 15:39:36

标签: java file text-files

所以我有以下代码,我应该阅读一个文本文件(这只是主类):

import gui.MenuWindow;
import java.io.IOException;
import javax.swing.JOptionPane;

public class Assessor {

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

        FileLoader file = new FileLoader("Example.txt");
        try{
            new MenuWindow(file.loader());
        } catch(Exception exc) {
            JOptionPane.showMessageDialog(null, "Error Reading File");
        }
    }
}

然后我必须使用Swing将Text加载到ListBox中。问题是我发现这个新代码来读取文本文件:

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

public class ReadTextFileExample {
    public static void main(String[] args) {
        File file = new File("test.txt");
        StringBuffer contents = new StringBuffer();
        BufferedReader reader = null;

        try {
            reader = new BufferedReader(new FileReader(file));
            String text = null;

            // repeat until all lines is read
            while ((text = reader.readLine()) != null) {
                contents.append(text)
                    .append(System.getProperty(
                        "line.separator"));
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (reader != null) {
                    reader.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        // show file contents here
        System.out.println(contents.toString());
    }
}

所以我想知道以下两行之间有什么区别:

FileLoader file = new FileLoader("Example.txt"); //First Code

File file = new File("test.txt"); //Second Code

而且...... StringBufferBufferedReader曾经是什么?谢谢!

2 个答案:

答案 0 :(得分:3)

  

所以我想知道以下两行之间有什么区别:

FileLoader file = new FileLoader("Example.txt"); //First Code

File file = new File("test.txt"); //Second Code

第一个创建了一个java.io.FileLoader,Andreas讨论了这个问题。由于javadoc表示“此类的构造函数假定默认字符编码和默认字节缓冲区大小合适”,因此should never be used

第二个创建java.io.File,它只是一个文件路径,其中包含一些可用于读取目录树,删除,创建和移动文件等的实用程序方法,或者它可以与{{一起使用1}}和其他类实际访问文件内容。

  

而且...... StringBuffer和BufferedReader过去常用的是什么?谢谢!

FileInputStream用于收集文件的内容。

StringBuffer用于加快文件的读取速度。 <{1}}批次使用内部缓冲区读取而不是一次读取一个字符。

答案 1 :(得分:2)

这是关于学习Java SE的示例性问题,特别是关于 java.io 包。我在开始时有点困惑,但现在我很确定你要比较FileReaderFile类,它们都属于同一个包 java.io

    {li>

    File Java SE API:&#34;文件和目录路径名的抽象表示。&#34;
    换句话说,它是在Java中处理文件系统上的文件和目录。由于Java是一种面向对象的语言,因此他们为它创建了一个类。文件,即二进制文件和文本文件,共享一些与目录共同的属性,如:绝对,规范路径和简单名称等。
    当然,File是 java中的基类之一.io 包和许多类FileReader都将它用于对象构建。

  1. FileReader
    &#34;读取字符文件的便捷类。&#34;
    它带有一个方便的构造函数,它将文件名或文件路径作为一个String。最初,它意味着由File实例构造。一般来说,Reader实例对于读取文本文件是切实可行的,而InputStream用于读取二进制文件。通常,Reader实例连接到字符集,例如,字符集。 "UTF-8"将字节流转换为字符流。

  2. 请同时查看Oracle提供的优秀Java Tutorials

    我希望FileFileReader之间的区别变得更加清晰。特别注意,当您实例化File实例时,没有I / O.要回答您的问题,两个类的互连将是:

    File file = new File("test.txt"); // 1) Instaniate the file
    
    Reader reader = new FileReader(file); // 2) Instantiate the Reader using the File instance
    

    当您在BufferedReader实例周围包裹Reader时,您可以按行读取文本文件:

    BufferedReader bufferedReader = new BufferedReader(reader); // 3) Get a "buffered reader" to have access line by line.
    
    当你想链接大量StringBuffer个对象时,

    String会出现,因为String个对象是不可变的,而字符串操作就像

    String s1 = "Star ";
    String s2 = "Wars";
    s1 = s1 + s2;
    

    非常昂贵,特别是在循环中,因为除了保留的Java VM堆空间之外,每次添加时都会创建一个新的String对象(左侧结果),几乎没有大小限制。

    让我指出,您应该更好地使用StringBuilder类,它更快,并且是Java 5版本中引入的StringBuffer的非同步对应部分。 StringBuffer保证在不同线程之间保持同步的功能几乎没有使用过。我作为Java程序员一生都没有遇到过它。