Java I/O 之文件操作
Java I/O
Java 附带了许多方便的I/O 类来支持通过字节流和文件系统的输入和输出。这是 Java I/O 示例的列表,包括文件、临时文件和目录操作、编码、序列化以及使用 zip 或 Gzip 压缩。
文件
文件示例列表,显示使用 Java I/O 创建、读取、写入、修改文件和获取文件信息
- 创建文件
- 构建文件路径
- 设置文件权限
- 使用 BufferedInputStream 读取文件
- 使用 BufferedReader 读取文件
- 使用 FileOutputStream 写入文件
- 使用 BufferedWriter 写入文件
- 将内容附加到文件
- 删除文件
- 仅删除具有特定扩展名的文件
- 仅查找具有特定扩展名的文件
- 重命名文件
- 复制文件
- 将文件移动到另一个目录
- 获取文件创建日期
- 获取文件上次修改日期
- 更改文件上次修改日期
- 使文件只读
- 获取文件大小
- 获取文件的文件路径
- 获取文件的总行数
- 检查文件是否存在
- 检查文件是否隐藏
- 从文件中读取 UTF-8 编码的数据
- 将 UTF-8 编码的数据写入文件
- 将文件内容分配给变量
- 生成文件校验和值
- 将 File 转换为字节数组
- 将字节数组转换为文件
- 将字符串转换为输入流
- 将输入流转换为字符串
- 将文件转换为十六进制
- 获取分区或卷中的总可用磁盘空间
在Java中创建并写入文件
使用 Files.newBufferedWriter
@Test
public void testCreateFile(){
String content = "啊啊啊~";
String fileName = "C:\\rzk\\newFile.txt";
Path path = Paths.get(fileName);
try {
Files.write(
//获取地址
path,
content.getBytes(StandardCharsets.UTF_8));
} catch (IOException e) {
e.printStackTrace();
}
}
Paths.get(文件地址)如果文件不存在,会自动创建文件(前提地址要正确)
Paths.get的源码
在已写入的文件后尾追加信息
Files.write(
//获取地址
path,
content.getBytes(StandardCharsets.UTF_8),
//在文件后尾追加
StandardOpenOption.APPEND);
啊啊啊啊啊啊啊啊~
write可使用list
String fileName = "C:\\rzk\\newFile.txt";
Path path = Paths.get(fileName);
List<String> list = Arrays.asList("1","2","3","4");
try {
Files.write(
path, list,
StandardCharsets.UTF_8);
} catch (IOException e) {
e.printStackTrace();
}
删除文件
使用NIO删除文件delete
@Test
public void writeTest(){
String fileName = "C:\\rzk\\newFile.txt";
String content = "我是世界主宰!!!";
try {
Path paths = Paths.get(fileName);
Files.write(paths, content.getBytes(StandardCharsets.UTF_8));
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void deleteTest(){
String fileName = "C:\\rzk\\newFile.txt";
Path path = Paths.get(fileName);
try {
Files.delete(path);
} catch (IOException e) {
e.printStackTrace();
}
}
但是如果文件不存在会抛NoSuchFileException异常 java.nio.file.NoSuchFileException: C:\rzk\newFile.txt
使用NIO删除文件deleteIfExists
deleteIfExists有返回boolean类型,不会像delete文件不存在会报空异常
@Test
public void deleteTest(){
String fileName = "C:\\rzk\\newFile.txt";
Path path = Paths.get(fileName);
try {
boolean exists = Files.deleteIfExists(path);
if (exists==true){
System.out.println("删除成功");
}else {
System.out.println("删除失败或者文件不存在");
}
} catch (IOException e) {
e.printStackTrace();
}
}
使用IO删除文件
@Test
public void delete1Test(){
String fileName = "C:\\rzk\\newFile.txt";
File file = new File(fileName);
if (file.delete()){
System.out.println("删除成功");
}else{
System.out.println("删除失败");
}
}
复制移动
复制
使用nio
@Test
public void copyTest(){
String fileName = "C:\\rzk\\newFile.txt";
String copyToFile = "C:\\rzk\\copyToFile.txt";
Path path = Paths.get(fileName);
Path path1 = Paths.get(copyToFile);
try {
Files.copy(path,path1);
} catch (IOException e) {
e.printStackTrace();
}
}
使用原生io流
@Test
public void copyTest1() throws IOException {
InputStream inputStream = null;
OutputStream outputStream = null;
String fileName = "C:\\rzk\\newFile.txt";
String copyToFile = "C:\\rzk\\copyToFile.txt";
File fromFile = new File(fileName);
File toFile = new File(copyToFile);
inputStream = new FileInputStream(fromFile);
outputStream = new FileOutputStream(toFile);
byte[] bytes = new byte[1024];
int length;
while ((length = inputStream.read(bytes)) > 0 ){
outputStream.write(bytes,0,length);
}
}
移动
@Test
public void moveTest(){
String fileName = "C:\\rzk\\newFile.txt";
String copyToFile = "C:\\rzk\\Users.txt";
Path path = Paths.get(fileName);
Path path1 = Paths.get(copyToFile);
try {
Files.move(path,path1);
} catch (IOException e) {
e.printStackTrace();
}
}
文件是否存在
Files.exists(path)来测试一个文件是否存在,path 可以是目录或文件,
所以加上判断不是目录以确保现有文件不是目录!Files.isDirectory(path)
public static void main(String[] args) {
Path path = Paths.get("C:\\rzk\\Users.txt");
//文件存在,并且不是目录
if (Files.exists(path) && !Files.isDirectory(path)){
System.out.println("Files 存在");
}else System.out.println("Files 不存在");
}
使用Files.exises
public static void main(String[] args) {
Path path = Paths.get("C:\\rzk\\Users.txt");
//文件存在,并且不是目录
if (Files.exists(path)){
//是否为普通文件
if (Files.isRegularFile(path)){
System.out.println("文件存在");
}
//是否是目录
if (Files.isDirectory(path)){
System.out.println("该文件不存在,但是它是目录");
}
}else System.out.println("Files 不存在");
}
提供了一个测试文件不存在
if (Files.notExists(path)){
System.out.println("文件不存在");
}
获取文件大小
public static void main(String[] args) {
String fileName = "C:\\rzk\\Users.txt";
printFileSizeNIO(fileName);
}
public static void printFileSizeNIO(String fileName){
Path path = Paths.get(fileName);
try {
Long bytes = Files.size(path);
System.out.println(String.format("%,d bytes",bytes));
System.out.println(String.format("%,d kilobytes",bytes/1024));
} catch (IOException e) {
e.printStackTrace();
}
}
创建目录
public static void main(String[] args) {
Path path = Paths.get("c:\\rzk1\\123\\321");
try {
Files.createDirectories(path);
System.out.println("目录创建成功");
} catch (IOException e) {
e.printStackTrace();
}
}