所以我有以下代码,我应该阅读一个文本文件(这只是主类):
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
而且...... StringBuffer
和BufferedReader
曾经是什么?谢谢!
答案 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 包。我在开始时有点困惑,但现在我很确定你要比较FileReader
和File
类,它们都属于同一个包 java.io 强>
File
Java SE API:&#34;文件和目录路径名的抽象表示。&#34;
换句话说,它是在Java中处理文件系统上的文件和目录。由于Java是一种面向对象的语言,因此他们为它创建了一个类。文件,即二进制文件和文本文件,共享一些与目录共同的属性,如:绝对,规范路径和简单名称等。
当然,File是 java中的基类之一.io 包和许多类FileReader
都将它用于对象构建。
FileReader
:
&#34;读取字符文件的便捷类。&#34;
它带有一个方便的构造函数,它将文件名或文件路径作为一个String
。最初,它意味着由File实例构造。一般来说,Reader
实例对于读取文本文件是切实可行的,而InputStream
用于读取二进制文件。通常,Reader实例连接到字符集,例如,字符集。 "UTF-8"
将字节流转换为字符流。
请同时查看Oracle提供的优秀Java Tutorials。
我希望File
和FileReader
之间的区别变得更加清晰。特别注意,当您实例化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程序员一生都没有遇到过它。