Java文件操作
摘要
文件是操作系统重要的组成部分,那么对文件的读写操作也必然是不可缺少的!本文将用Java核心类库提供的Api对文件进行操作,通过本文可以基本掌握在Java的世界里是如果对文件进行操作的!
创建文件
创建一个文件很简单,基本定义一个文件路径,调用Api即可!
@Test
public void test_create() throws IOException {
final File file = new File(TMP_FILE);
file.createNewFile();
}
注意事项
- 当前目录不存在时,会出异常
java.io.IOException: No such file or directory
createNewFile()
当文件存在时,返回False
文件读写操作
Java里对文件的操作(读、写)对象可以分为两类
- 对字节操作
- 对字符操作
关于什么是字节和字符,直观的意思就是长度不一样嘛!关于Java里字节和字符网上很多资料可以阅读,这里不是表述的重点!
写入文件
- 按字节处理
@Test
public void test_byte_write() throws IOException {
String text = "Hello Java!\nHello World!";
try (
FileOutputStream fileOutputStream = new FileOutputStream(TMP_FILE);
//在fileOutputStream的基础上加了一个缓冲区(适合大容量写入)、即使不加缓冲区也可以利用fileWrite写入磁盘
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream)
) {
bufferedOutputStream.write(text.getBytes(StandardCharsets.UTF_8));
}
}
- 按字符处理
@Test
public void test_character_Write() throws IOException {
String text = "Hello Java!\nHello World!";
try (
FileWriter fileWriter = new FileWriter(TMP_FILE);
//在FileWrite的基础上加了一个缓冲区(适合大容量写入)、即使不加缓冲区也可以利用fileWrite写入磁盘
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
) {
bufferedWriter.write(text);
bufferedWriter.flush();
}
}
读取文件
- 按字节处理
@Test
public void test_byte_read() throws IOException {
try (
FileInputStream fileInputStream = new FileInputStream(TMP_FILE);
BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
) {
int l = 0;
final StringBuilder builder = new StringBuilder();
while ((l = bufferedInputStream.read()) != -1) {
builder.append((char) l);
}
System.out.println(builder);
}
}
- 按字符处理
@Test
public void test_character_read() throws IOException {
try (
FileReader reader = new FileReader(TMP_FILE);
BufferedReader bufferedReader = new BufferedReader(reader);
) {
int l = 0;
final StringBuilder builder = new StringBuilder();
while ((l = bufferedReader.read()) != -1) {
builder.append((char) l);
}
System.out.println(builder);
}
}
总结
不管是字节操作还是字符操作,Java I/O库存都提供了两种策略操作
- 直接操作磁盘
- 带有一个缓冲区的操作 (
Buffer
)
那么Java提供这两种Api我们平时用哪一个呢?
操作系统在每次操作磁盘都是一个费时费力的工作、Buffer的作用就是提供一个缓冲区,至于这个缓冲区的作用,可以想像成:
很久以前人们吃饭是没有碗的!每次吃饭,每次吃一口就去跑去锅里盛一口、这样来回跑太累了。后来发明了碗,每次吃多少就盛到碗里,这样就不用来回的跑!
那么这个碗不就是Buffer嘛!!但是某一次我不是很饿也只能吃一口,那么那个碗还有用嘛?这个是值得思考的问题!
文中示例代码:GitHub
本文来自博客园,作者:乌托拉赛文,转载请注明原文链接:https://www.cnblogs.com/m78-seven/articles/15222509.html