一.File类
public void test01() throws IOException {
//文件或目录的绝对路径
File file = new File("f:/a.jpg");
file = new File("f:/","a.jpg");
//创建文件,目录必须正确,文件存在时返回false
file.createNewFile();
//创建一层目录和多层目录
file.mkdir();
file.mkdirs();
//判断方法,返回true/false
file.exists();
file.isDirectory();
file.isFile();
//获取方法
System.out.println();
//获取文件名,父目录名,父目录,完整路径,文件大小
file.getName();
file.getParent();
file.getParentFile();
file.getPath();
file.length();
//获取当前目录所有目录和文件,目录名和文件名,盘符
file.listFiles();
file.list();
File.listRoots();
//删除文件或目录(目录中有文件删除不了)
file.delete();
//移动文件或重命名
file.renameTo(new File("f:/b.jpg"));
}
二.字符流
1.FileReader类和FileWriter类
public void test01() throws Exception {
//文件不存在会报错
// FileReader reader = new FileReader(new File("f:/a.txt"));
FileReader reader = new FileReader("f:/a.txt");
int num = 0;
String word = "";
char[] buf = new char[10];
//一个一个字读出来
while((num = reader.read()) !=-1) {
word += (char)num;
}
//按数组的长度读出来放数组里
while((num = reader.read(buf))!=-1) {
word += new String(buf,0,num);
}
reader.close();
System.out.println(word);
}
public void test02() throws IOException {
//为false或无时,是覆盖.为true时是追加。
FileWriter w = new FileWriter("f:/b/a",false);
FileWriter w2 = new FileWriter(new File("f:/b/a"),true);
//文件不存在会自动创建,目录不存在会报错
FileWriter writer = new FileWriter("f:/b.txt");
char[] buf = {'一','二'};
//写入字符数组,字符,字符串
writer.write(buf);
writer.write('三');
writer.write("四五六");
//返回Writer对象
writer.append('七').append("八九十");
//将缓存区数据写入,
//在close中会自动调用,无须在close前显式调用
writer.flush();
writer.close();
}
2.BufferedReader类和BufferedWriter类
public void test03() throws IOException {
FileReader r = new FileReader("f:/a/a.txt");
FileWriter w = new FileWriter("f:/b/b.txt");
//使用缓冲区,提高效率
BufferedReader br = new BufferedReader(r);
//允许自定义缓冲区大小(FileWriter的缓存区太小)
BufferedWriter bw = new BufferedWriter(w,1024*10);
String word;
//提供了一个读行的方法
while ((word = br.readLine())!=null) {
bw.write(word);
bw.newLine();
}
bw.close();
br.close();
r.close();
w.close();
}
三.字节流
1.FileInputStream类和FileOutputStream类
public void test01() throws Exception {
FileInputStream input = new FileInputStream("f:/a.jpg");
FileOutputStream output = new FileOutputStream("f:/b.jpg");
//获取文件大小,可作为数组长度(大文件慎用)
input.available();
byte[] buf = new byte[1024];
int len;
while((len = input.read(buf))!=-1) {
output.write(buf, 0, len);
}
output.close();
input.close();
}
2.BufferedInputStream类和BufferedOutputStream类
public void test02() throws Exception {
FileInputStream i = new FileInputStream("f:/a.jpg");
FileOutputStream o = new FileOutputStream("f:/b.jpg");
BufferedInputStream input = new BufferedInputStream(i);
BufferedOutputStream output = new BufferedOutputStream(o,1024*60);
byte[] buf = new byte[1024];
int len;
while((len = input.read(buf))!=-1) {
output.write(buf, 0, len);
}
output.close();
input.close();
}
四.总结
类名 | 描述 |
---|---|
FileReader | 字符输入流 |
FileWriter | 字符输出流 |
BufferedReader | 缓存字符输入流 |
BufferedWriter | 缓存字符输出流 |
FileInputStream | 字节输入流 |
FileOutputStream | 字节输出流 |
BufferedInputStream | 缓存字节输入流 |
BufferedOutputStream | 缓存字节输出流 |
.
五.应用
- 将base64编码字符串保存成文件
/**
* 根据base64编码将文件保存到服务器
* @param base64 base64编码字符串
* @param filePath 服务器绝对路径
* @param fileName 文件名
*/
public static void base64UpFile(String base64, String filePath, String fileName) {
FileOutputStream out = null;
byte[] buffer;
try {
//获取文件对象
File file = new File(filePath, fileName);
//判断文件是否存在,不存在则创建
if (!file.exists()) {
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
}
file.createNewFile();
}
//获取输出流
out = new FileOutputStream(file);
//将64base编码转成数组
buffer = new BASE64Decoder().decodeBuffer(base64);
//写入文件
out.write(buffer);
} catch (Exception e) {
e.printStackTrace();
} finally {
//关闭输出流
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}