目录
Java中操作文件
在Java中通过java.io.File类来对一个文件(目录)进行抽象的描述,但是有File对象并不代表真实存在该文件.
File类中常用的方法有创建文件、创建目录、文件/目录的删除、判断文件/目录是否存在、重命名文件等等
· 创建文件
package io.fileoperate;
import java.io.File;
import java.io.IOException;
public class CreateFile {
public static void main(String[] args) throws IOException {
File f = new File("D://TMP/2.txt");
if(!f.exists()) {
f.createNewFile();
}
}
}
执行代码结束后,对应的路径就成功创建2.txt文件
· 删除文件(delete方法)
package io.fileoperate;
import java.io.File;
public class Delete {
public static void main(String[] args) {
File f = new File("D:/TMP/2.txt");
f.delete();
}
}
· renameTo方法的应用
renameTo方法既可以实现文件的重命名,也可以实现文件的移动
实现文件重命名
package io.fileoperate;
import java.io.File;
public class Rename {
public static void main(String[] args) {
File f = new File("D:/TMP/1.txt");
f.renameTo(new File("D:/TMP/1_rename.txt"));
}
}
利用renameTo方法实现文件的移动,其原理也是文件的重命名
package io.fileoperate;
import java.io.File;
public class Remove {
public static void main(String[] args) {
File f = new File("D:/TMP/2.txt");
f.renameTo(new File("D:/TMP/1/2.txt"));
}
}
· 利用listFiles方法实现获取目录下的所有目录以及文件
利用递归的方式,每次递归获取到的文件/目录都存在一个File类数组中,如果是目录则打印后继续递归遍历,如果是文件就直接打印
package io.fileoperate;
import java.io.File;
public class GetAll {
//递归遍历
public static void main(String[] args) {
File f = new File("D:/TMP/2");
list(f);
}
private static void list(File f) {
//不论是文件还是目录都打印
System.out.println(f);
//如果是目录,还需要查找其子目录/文件
if(f.isDirectory()) {
//子文件/目录,不包含孙子
File[] children = f.listFiles();
for (File child : children) {
list(child);
}
}
}
}
文件内容的读写——IO流
将数据从一个设备传输到另外一个设备就是io操作,i是input输入,o是output输出,在java中System.in是标准输入流、System.out是标准输出流、System.err是错误输出流
InputStream是顶级的输入流,所有使用的io流都是其子类
InputStream文件输入流
· 利用FileInputStream读取文件
package iohomework;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class GetFileInfo {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("D:/TMP/1.txt");
byte[] bytes = new byte[fis.available()];
int b = 0;
for (int i = 0; (b = fis.read()) != -1; i++) {
bytes[i] = (byte)b;
}
System.out.println(new String(bytes));
fis.close();
}
}
· 利用字符输入流读取文件
package io.fileoperate;
import java.io.*;
public class Read {
public static void main(String[] args) throws IOException {
//使用比较多的是BufferedReader => 读文本文件,且效率比较高
//先获取一个字节流
FileInputStream fis = new FileInputStream("D:/TMP/1.txt");
//再包装为一个字符转换流
InputStreamReader isr = new InputStreamReader(fis);
//再包装为字符流
BufferedReader br = new BufferedReader(isr);
String line;
//读取一行,如果没结束就一直读
while((line = br.readLine()) != null) {
System.out.println(line);
}
}
}
OutputStream文件输出流
· 利用字节流写文件
package iohomework;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
public class Write {
public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("D:/TMP/1.txt");
String s = "hello hello,学习Java我很开心";
fos.write(s.getBytes(StandardCharsets.UTF_8));
fos.close();
}
}
· 利用字符流写文件
package iohomework;
import java.io.*;
public class Write1 {
public static void main(String[] args) throws FileNotFoundException, UnsupportedEncodingException {
//先获取一个字节输出流
FileOutputStream fos = new FileOutputStream("D:/TMP/1.txt");
//再将其包装成一个字节字符转换流
OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8");
//再将其包装为一个字符输出流
PrintWriter pw = new PrintWriter(osw);
pw.print("啦啦啦~");
pw.println("Java学习之路");
pw.flush();
pw.close();
}
}