Java的java.io
包提供了几乎所有的类来执行Java中的输入输出(I/O)。这些流表示一个输入源和输出目的地。Java中的流支持多种数据类型,如基本类型、对象、本地化字符等。
流
流可以定义为一系列的数据。主要有两种类型的流:
-
输入流(InputStream):用于从源读取数据。
-
输出流(OutputStream):用于向目的地写入数据。
字节流
Java字节流用于执行8位字节的输入和输出。尽管有很多与字节流相关的类,最常用的类是FileInputStream
和FileOutputStream
。以下是一个使用这两个类将输入文件复制到输出文件的示例:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class CopyFile {
public static void main(String args[]) throws IOException {
FileInputStream in = null;
FileOutputStream out = null;
try {
in = new FileInputStream("input.txt");
out = new FileOutputStream("output.txt");
int c;
while ((c = in.read()) != -1) {
out.write(c);
}
} finally {
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
}
}
}
字符流
Java字节流用于执行8位字节的输入和输出,而Java字符流则用于执行16位Unicode的输入和输出。虽然有许多与字符流相关的类,但最常用的类是FileReader
和FileWriter
。以下是一个使用这两个类将输入文件(具有Unicode字符)复制到输出文件的示例:
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class CopyFile {
public static void main(String args[]) throws IOException {
FileReader in = null;
FileWriter out = null;
try {
in = new FileReader("input.txt");
out = new FileWriter("output.txt");
int c;
while ((c = in.read()) != -1) {
out.write(c);
}
} finally {
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
}
}
}
标准流
所有的编程语言都提供了标准输入输出的支持,用户程序可以从键盘获取输入,并且可以在计算机屏幕上产生输出。类似于C或C++中的三个标准设备STDIN、STDOUT和STDERR,Java也提供了以下三个标准流:
-
标准输入:用于向用户的程序提供数据,通常使用键盘作为标准输入流,并表示为
System.in
。
-
标准输出:用于输出用户程序产生的数据,通常使用计算机屏幕作为标准输出流,并表示为
System.out
。
-
标准错误:用于输出用户程序产生的错误数据,通常使用计算机屏幕作为标准错误流,并表示为
System.err
。
以下是一个简单的程序,它创建了一个InputStreamReader
来读取标准输入流,直到用户输入“q”为止:
import java.io.InputStreamReader;
public class ReadConsole {
public static void main(String args[]) throws IOException {
InputStreamReader cin = null;
try {
cin = new InputStreamReader(System.in);
System.out.println("输入字符,按'q'退出。");
char c;
do {
c = (char) cin.read();
System.out.print(c);
} while(c != 'q');
} finally {
if (cin != null) {
cin.close();
}
}
}
}
文件输入输出
如前所述,流可以定义为一系列的数据。InputStream
用于从源读取数据,而OutputStream
用于向目的地写入数据。
文件输入流(FileInputStream
)
此流用于从文件中读取数据。可以使用new
关键字创建对象,并有多种构造函数可用。
InputStream f = new FileInputStream("C:/java/hello");
或
File f = new File("C:/java/hello");
InputStream f = new FileInputStream(f);
一旦有了InputStream
对象,就可以使用一系列辅助方法来读取流或对流执行其他操作。
文件输出流(FileOutputStream
)
FileOutputStream
用于创建文件并写入数据。如果文件尚不存在,将在打开输出之前创建该文件。
OutputStream f = new FileOutputStream("C:/java/hello")
或
File f = new File("C:/java/hello");
OutputStream f = new FileOutputStream(f);
一旦有了OutputStream
对象,就可以使用一系列辅助方法来写入流或对流执行其他操作。
其他重要的输入输出流
除了上述提到的类之外,还有一些其他重要的输入输出流类,例如:
-
ByteArrayInputStream
和 ByteArrayOutputStream
-
DataInputStream
和 DataOutputStream
这些类提供了更多的功能,如处理字节数组、读写基本数据类型等。要了解更多细节,可以参考Java文档或相关教程。### Java中的文件流示例
下面是一个示例,演示了如何使用InputStream
和OutputStream
来写入和读取二进制数据:
import java.io.InputStream;
import java.io.OutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileStreamTest {
public static void main(String args[]) {
try {
byte[] bWrite = {11, 21, 3, 40, 5};
OutputStream os = new FileOutputStream("test.txt");
for (int x = 0; x < bWrite.length; x++) {
os.write(bWrite[x]);
}
os.close();
InputStream is = new FileInputStream("test.txt");
int size = is.available();
for (int i = 0; i < size; i++) {
System.out.print((char) is.read() + " ");
}
is.close();
} catch (IOException e) {
System.out.print("异常: " + e.getMessage());
}
}
}
上面的代码会创建文件test.txt
,并以二进制格式写入给定的数字。输出将会是在标准输出屏幕上显示的数字序列。
文件导航和I/O
除了以上示例外,还有其他几个类可以帮助我们了解文件导航和I/O的基本知识:
Java中的目录
目录是一种特殊的文件,它可以包含其他文件和目录。你可以使用File
对象来创建目录,也可以用它来列出目录中的文件。下面是一些关于目录的操作示例。
创建目录
有两个有用的File
工具方法可以用来创建目录:
-
mkdir()
方法创建一个目录,成功时返回 true
,失败时返回 false
。失败通常意味着File
对象中指定的路径已经存在,或者整个路径尚不存在而不能创建目录。
-
mkdirs()
方法不仅创建一个目录,还创建该目录的所有父目录。
示例:创建目录
下面的示例创建了一个目录/tmp/user/java/bin
:
import java.io.File;
public class CreateDir {
public static void main(String args[]) {
String dirname = "/tmp/user/java/bin";
File d = new File(dirname);
d.mkdirs();
}
}
编译并运行上述代码以创建/tmp/user/java/bin
目录。
注意:Java会根据操作系统的约定自动处理路径分隔符。如果你在一个Windows版本的Java上使用正斜杠(/),路径仍然能够正确解析。
列出目录
你可以使用File
对象提供的list()
方法来列出目录中的所有文件和子目录:
import java.io.File;
public class ReadDir {
public static void main(String[] args) {
File file = null;
String[] paths;
try {
file = new File("/tmp");
paths = file.list();
for(String path:paths) {
System.out.println(path);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
根据你的/tmp
目录中的文件和子目录,输出可能如下:
test1.txt
test2.txt
ReadDir.java
ReadDir.class
这个输出列出了/tmp
目录中的文件和子目录。
下面是一个示例,演示了如何使用InputStream
和OutputStream
来写入和读取二进制数据:
import java.io.InputStream;
import java.io.OutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileStreamTest {
public static void main(String args[]) {
try {
byte[] bWrite = {11, 21, 3, 40, 5};
OutputStream os = new FileOutputStream("test.txt");
for (int x = 0; x < bWrite.length; x++) {
os.write(bWrite[x]);
}
os.close();
InputStream is = new FileInputStream("test.txt");
int size = is.available();
for (int i = 0; i < size; i++) {
System.out.print((char) is.read() + " ");
}
is.close();
} catch (IOException e) {
System.out.print("异常: " + e.getMessage());
}
}
}
上面的代码会创建文件test.txt
,并以二进制格式写入给定的数字。输出将会是在标准输出屏幕上显示的数字序列。
文件导航和I/O
除了以上示例外,还有其他几个类可以帮助我们了解文件导航和I/O的基本知识:
Java中的目录
目录是一种特殊的文件,它可以包含其他文件和目录。你可以使用File
对象来创建目录,也可以用它来列出目录中的文件。下面是一些关于目录的操作示例。
创建目录
有两个有用的File
工具方法可以用来创建目录:
-
mkdir()
方法创建一个目录,成功时返回 true
,失败时返回 false
。失败通常意味着File
对象中指定的路径已经存在,或者整个路径尚不存在而不能创建目录。
-
mkdirs()
方法不仅创建一个目录,还创建该目录的所有父目录。
示例:创建目录
下面的示例创建了一个目录/tmp/user/java/bin
:
import java.io.File;
public class CreateDir {
public static void main(String args[]) {
String dirname = "/tmp/user/java/bin";
File d = new File(dirname);
d.mkdirs();
}
}
编译并运行上述代码以创建/tmp/user/java/bin
目录。
注意:Java会根据操作系统的约定自动处理路径分隔符。如果你在一个Windows版本的Java上使用正斜杠(/),路径仍然能够正确解析。
列出目录
你可以使用File
对象提供的list()
方法来列出目录中的所有文件和子目录:
import java.io.File;
public class ReadDir {
public static void main(String[] args) {
File file = null;
String[] paths;
try {
file = new File("/tmp");
paths = file.list();
for(String path:paths) {
System.out.println(path);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
根据你的/tmp
目录中的文件和子目录,输出可能如下:
test1.txt
test2.txt
ReadDir.java
ReadDir.class
这个输出列出了/tmp
目录中的文件和子目录。
Java中的文件流示例
下面是一个示例,演示了如何使用InputStream
和OutputStream
来写入和读取二进制数据:
import java.io.InputStream;
import java.io.OutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileStreamTest {
public static void main(String args[]) {
try {
byte[] bWrite = {11, 21, 3, 40, 5};
OutputStream os = new FileOutputStream("test.txt");
for (int x = 0; x < bWrite.length; x++) {
os.write(bWrite[x]);
}
os.close();
InputStream is = new FileInputStream("test.txt");
int size = is.available();
for (int i = 0; i < size; i++) {
System.out.print((char) is.read() + " ");
}
is.close();
} catch (IOException e) {
System.out.print("异常: " + e.getMessage());
}
}
}
上面的代码会创建文件test.txt
,并以二进制格式写入给定的数字。输出将会是在标准输出屏幕上显示的数字序列。
文件导航和I/O
除了以上示例外,还有其他几个类可以帮助我们了解文件导航和I/O的基本知识:
Java中的目录
目录是一种特殊的文件,它可以包含其他文件和目录。你可以使用File
对象来创建目录,也可以用它来列出目录中的文件。下面是一些关于目录的操作示例。
创建目录
有两个有用的File
工具方法可以用来创建目录:
-
mkdir()
方法创建一个目录,成功时返回 true
,失败时返回 false
。失败通常意味着File
对象中指定的路径已经存在,或者整个路径尚不存在而不能创建目录。
-
mkdirs()
方法不仅创建一个目录,还创建该目录的所有父目录。
示例:创建目录
下面的示例创建了一个目录/tmp/user/java/bin
:
import java.io.File;
public class CreateDir {
public static void main(String args[]) {
String dirname = "/tmp/user/java/bin";
File d = new File(dirname);
d.mkdirs();
}
}
编译并运行上述代码以创建/tmp/user/java/bin
目录。
注意:Java会根据操作系统的约定自动处理路径分隔符。如果你在一个Windows版本的Java上使用正斜杠(/),路径仍然能够正确解析。
列出目录
你可以使用File
对象提供的list()
方法来列出目录中的所有文件和子目录:
import java.io.File;
public class ReadDir {
public static void main(String[] args) {
File file = null;
String[] paths;
try {
file = new File("/tmp");
paths = file.list();
for(String path:paths) {
System.out.println(path);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
根据你的/tmp
目录中的文件和子目录,输出可能如下:
test1.txt
test2.txt
ReadDir.java
ReadDir.class
这个输出列出了/tmp
目录中的文件和子目录。### Java中的文件流示例
下面是一个示例,演示了如何使用InputStream
和OutputStream
来写入和读取二进制数据:
import java.io.InputStream;
import java.io.OutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileStreamTest {
public static void main(String args[]) {
try {
byte[] bWrite = {11, 21, 3, 40, 5};
OutputStream os = new FileOutputStream("test.txt");
for (int x = 0; x < bWrite.length; x++) {
os.write(bWrite[x]);
}
os.close();
InputStream is = new FileInputStream("test.txt");
int size = is.available();
for (int i = 0; i < size; i++) {
System.out.print((char) is.read() + " ");
}
is.close();
} catch (IOException e) {
System.out.print("异常: " + e.getMessage());
}
}
}
上面的代码会创建文件test.txt
,并以二进制格式写入给定的数字。输出将会是在标准输出屏幕上显示的数字序列。
文件导航和I/O
除了以上示例外,还有其他几个类可以帮助我们了解文件导航和I/O的基本知识:
Java中的目录
目录是一种特殊的文件,它可以包含其他文件和目录。你可以使用File
对象来创建目录,也可以用它来列出目录中的文件。下面是一些关于目录的操作示例。
创建目录
有两个有用的File
工具方法可以用来创建目录:
-
mkdir()
方法创建一个目录,成功时返回 true
,失败时返回 false
。失败通常意味着File
对象中指定的路径已经存在,或者整个路径尚不存在而不能创建目录。
-
mkdirs()
方法不仅创建一个目录,还创建该目录的所有父目录。
示例:创建目录
下面的示例创建了一个目录/tmp/user/java/bin
:
import java.io.File;
public class CreateDir {
public static void main(String args[]) {
String dirname = "/tmp/user/java/bin";
File d = new File(dirname);
d.mkdirs();
}
}
编译并运行上述代码以创建/tmp/user/java/bin
目录。
注意:Java会根据操作系统的约定自动处理路径分隔符。如果你在一个Windows版本的Java上使用正斜杠(/),路径仍然能够正确解析。
列出目录
你可以使用File
对象提供的list()
方法来列出目录中的所有文件和子目录:
import java.io.File;
public class ReadDir {
public static void main(String[] args) {
File file = null;
String[] paths;
try {
file = new File("/tmp");
paths = file.list();
for(String path:paths) {
System.out.println(path);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
根据你的/tmp
目录中的文件和子目录,输出可能如下:
test1.txt
test2.txt
ReadDir.java
ReadDir.class
这个输出列出了/tmp
目录中的文件和子目录。