0
点赞
收藏
分享

微信扫一扫

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();
}
}

Java I/O 之文件操作_java


Paths.get(文件地址)如果文件不存在,会自动创建文件(前提地址要正确)
Paths.get的源码


Java I/O 之文件操作_删除文件_02

在已写入的文件后尾追加信息

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();
}

Java I/O 之文件操作_删除文件_03

删除文件

使用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


Java I/O 之文件操作_删除文件_04

使用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();
}
}


举报

相关推荐

0 条评论