Java文件流操作是Java语言中常用的一种文件操作方式。Java中的文件流可以用于读取和写入文件,是对底层字节流的封装,可以非常方便地对文件进行操作。在本文中,我们将从多个方面对Java文件流操作进行详细的阐述,旨在帮助读者更好地掌握Java文件流操作的知识。
一、文件流的概念
文件流,顾名思义,就是针对文件进行操作的流。在Java中提供了多个用于读写文件的类,它们都继承自字节流(InputStream / OutputStream)。其中,InputStream和OutputStream是字节输入和输出流的基类,具体的子类包括FileInputStream、FileOutputStream、ByteArrayInputStream、ByteArrayOutputStream等。这些类在进行文件操作时,数据流会被转换为字节流,在处理完之后再转回数据流。
二、文件读取流
文件读取流用于从文件中读取数据,常用的文件读取流有:FileInputStream和BufferedInputStream。
1. FileInputStream
FileInputStream是一个阻塞式的文件读取流,读取文件时直接把文件读入内存,适合较小的文件。如果文件过大,将会发生内存溢出。以下是FileInputStream的使用示例:
FileInputStream fileInputStream = null;
try {
fileInputStream = new FileInputStream(new File("file.txt"));
byte[] buffer = new byte[1024];
int len = 0;
while ((len = fileInputStream.read(buffer)) != -1) {
String str = new String(buffer, 0, len, "UTF-8");
System.out.println(str);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fileInputStream != null) {
try {
fileInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
2. BufferedInputStream
BufferedInputStream是一个高效的文件读取流,它提供了缓冲区,可以对文件进行缓存,从而提高读取文件的效率。以下是BufferedInputStream的使用示例:
BufferedInputStream bufferedInputStream = null;
try {
bufferedInputStream = new BufferedInputStream(new FileInputStream(new File("file.txt")));
byte[] buffer = new byte[1024];
int len = 0;
while ((len = bufferedInputStream.read(buffer)) != -1) {
String str = new String(buffer, 0, len, "UTF-8");
System.out.println(str);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (bufferedInputStream != null) {
try {
bufferedInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
三、文件写入流
文件写入流用于往文件中写入数据,常用的文件写入流有:FileOutputStream和BufferedOutputStream。
1. FileOutputStream
FileOutputStream是一个阻塞式的文件写入流,数据写入文件时通过write()方法直接写入内存,适合较小的文件。如果文件过大,将会发生内存溢出。以下是FileOutputStream的使用示例:
FileOutputStream fileOutputStream = null;
try {
fileOutputStream = new FileOutputStream(new File("newFile.txt"));
String str = "Hello World!";
byte[] bytes = str.getBytes("UTF-8");
fileOutputStream.write(bytes, 0, bytes.length);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fileOutputStream != null) {
try {
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
2. BufferedOutputStream
BufferedOutputStream是一个高效的文件写入流,它提供了缓冲区,可以对文件进行缓存,从而提高写入文件的效率。以下是BufferedOutputStream的使用示例:
BufferedOutputStream bufferedOutputStream = null;
try {
bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(new File("newFile.txt")));
String str = "Hello World! Buffered.";
byte[] bytes = str.getBytes("UTF-8");
bufferedOutputStream.write(bytes, 0, bytes.length);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (bufferedOutputStream != null) {
try {
bufferedOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
四、文件复制
文件复制是文件操作的一个常见需求,通过Java文件流操作可非常方便地实现文件复制。
public static void copyFile(File sourceFile, File targetFile) {
InputStream inputStream = null;
BufferedInputStream bufferedInputStream = null;
OutputStream outputStream = null;
BufferedOutputStream bufferedOutputStream = null;
try {
inputStream = new FileInputStream(sourceFile);
bufferedInputStream = new BufferedInputStream(inputStream);
outputStream = new FileOutputStream(targetFile);
bufferedOutputStream = new BufferedOutputStream(outputStream);
byte[] buffer = new byte[1024];
int len = 0;
while ((len = bufferedInputStream.read(buffer)) != -1) {
bufferedOutputStream.write(buffer, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (bufferedOutputStream != null) {
bufferedOutputStream.close();
}
if (outputStream != null) {
outputStream.close();
}
if (bufferedInputStream != null) {
bufferedInputStream.close();
}
if (inputStream != null) {
inputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
五、文件删除
文件删除是Java文件操作中的常见需求,删除文件也可通过文件流操作来实现。
public static boolean deleteFile(File file) {
if (file.exists() && file.isFile()) {
return file.delete();
}
return false;
}
总结
本篇文章详细地阐述了Java文件流操作的各个方面,从概念、文件读取流、文件写入流、文件复制、文件删除等多个方面进行了详细的介绍。掌握这些知识,可以帮助我们更好地进行Java文件操作。
原创文章,作者:IBEU,如若转载,请注明出处:https://www.506064.com/n/141115.html
微信扫一扫
支付宝扫一扫