专栏:JavaEE初阶起飞计划
个人主页:手握风云
目录
一、Java文件内容写入
1.1. OutputStream
OutputStream同样只是⼀个抽象类,要使用还需要具体的实现类。我们现在还是只关⼼写入文件中,所以使用FileOutputStream。int参数类型是写入要给字节的数据;byte[]参数类将b这个字符数组中的数据全部写⼊os中。
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class Demo1 {
public static void main(String[] args) {
try (OutputStream outputStream = new FileOutputStream("./test.txt")) {
// “你好”的字符编码
outputStream.write(0xe4);
outputStream.write(0xbd);
outputStream.write(0xa0);
outputStream.write(0xe5);
outputStream.write(0xa5);
outputStream.write(0xbd);
} catch (IOException e) {
e.printStackTrace();
}
}
}
但上面写的代码,每次打开文件,都会清空原有的内容,我们可以在write方法后面加一个参数append,就能从文件末尾追加内容。
二、字符流读取和写入
2.1. Reader
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
public class Demo3 {
public static void main(String[] args) {
try (Reader reader = new FileReader("./test.txt")) {
while (true) {
int ch = reader.read();
if (ch == -1) {
break;
}
char c = (char) ch;
System.out.println(c);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
我们同样也可以使用字符数组来进行读取。
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
public class Demo3 {
public static void main(String[] args) {
try (Reader reader = new FileReader("./test.txt")) {
while (true) {
char[] chars = new char[1024];
int c = reader.read(chars);
if (c == -1) {
break;
}
for (int i = 0; i < c; i++) {
System.out.println(chars[i]);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
2.2. Writer
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class Demo4 {
public static void main(String[] args) {
try (Writer writer = new FileWriter("./test.txt")) {
writer.write("你好世界");
} catch (IOException e) {
e.printStackTrace();
}
}
}
三、示例练习
3.1. 查找文件功能
扫描指定目录,并找到名称中包含指定字符的所有普通文件(不包含目录),并且后续询问⽤户是否要删除该文件。
import java.io.File;
import java.util.Scanner;
public class Demo5 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("请输入要搜索的目录:");
String dir = in.nextLine();
System.out.println("请输入要查询的文件名:");
String filename = in.nextLine();
// 判断目录是否存在
File rootFile = new File(dir);
if (!rootFile.isDirectory()) {
System.out.println("目录不存在!");
return;
}
// 利用递归进行搜索
searchFile(rootFile, filename);
}
private static void searchFile(File rootFile, String filename) {
// 列出rootFile中的内容
File[] files = rootFile.listFiles();
if (files == null) {
// 空目录
return;
}
// 遍历files数组,判断元素类型
for (File file : files) {
if (file.isDirectory()) {
searchFile(file, filename);
} else if (file.isFile()) {
if (file.getName().contains(filename)) {
tryDel(file);
}
}
}
}
private static void tryDel(File file) {
System.out.println("准备删除文件:" + file.getAbsolutePath());
Scanner in = new Scanner(System.in);
System.out.println("是否确认删除?(Y/N)");
String choice = in.nextLine();
if (choice.equalsIgnoreCase("Y")) {
file.delete();
System.out.println("删除成功");
}
}
}