在Java中,输入输出(I/O)操作涉及从数据源读取数据或将数据写入目标位置,这些数据源或目标可以是文件、网络、控制台等。Java提供了丰富的类和方法来处理这些操作,确保数据可以正确、高效地传输。
Java的输入输出主要分为两大类:字节流(Byte Streams)和字符流(Character Streams)。字节流主要用于处理原始数据,如图片、音频等,而字符流主要用于处理文本数据。
1.字节流
字节流以字节(8位)为单位处理数据。主要的字节流类有:
·InputStream:所有字节输入流的超类。
·OutputStream:所有字节输出流的超类。
常见的字节流子类包括:
·FileInputStream:用于从文件读取字节。
·FileOutputStream:用于向文件写入字节。
·BufferedInputStream/BufferedOutputStream:带有缓冲区的输入/输出流,可以提高读写效率。
·DataInputStream/DataOutputStream:可以与基本数据类型一起使用的输入/输出流。
2.字符流
字符流以字符为单位处理数据,主要用于文本文件的读写。主要的字符流类有:
·Reader:所有字符输入流的超类。
·Writer:所有字符输出流的超类。
常见的字符流子类包括:
·FileReader:用于从字符文件读取数据。
·FileWriter:用于向字符文件写入数据。
·BufferedReader/BufferedWriter:带有缓冲区的字符输入/输出流。
·InputStreamReader/OutputStreamWriter:用于在字节流和字符流之间进行转换。
3.其他I/O类
除了基本的输入/输出流,Java还提供了其他一些有用的I/O类,如:
·PrintStream 和 PrintWriter:提供了方便的打印方法,可以将各种数据类型转换为字符串并输出。
·Scanner:用于从各种输入源(如文件、控制台等)读取原始数据类型和字符串。
·RandomAccessFile:支持文件的随机访问,即可以从文件的任意位置开始读写数据。
下面是一个简单的示例,展示如何使用Java的输入输出流来读取和写入文件:
在上面的示例中,我们使用了FileWriter来写入文件,并使用FileReader和BufferedReader来读取文件。注意,我们使用了try-with-resources语句来自动关闭流,这是一种推荐的做法,因为它可以确保在程序执行完毕后流被正确关闭,即使在发生异常的情况下也是如此。