主要是针对文件查询,创建,删除,读取等操作的一些描述:
1、文件的基础操作:
1.1、获取文件相关信息:
// File file=new File("F:\\ciyu\\ciyu3.txt");
// System.out.println(file.getName());//获取文件名称
// System.out.println(file.getPath());//获取文件路径
// System.out.println(file.getParent());//获取文件父目录
// System.out.println(file.isAbsolute());//判断文件是否完整
// System.out.println(file.exists());//判断文件是否存在
// System.out.println(file.isFile());//判断是否是文件
// System.out.println(file.isDirectory());//判断是否是目录
// file.createNewFile();//创建新的文件
// File file1=new File("F:\\ciyu");//读取某个目录下所有的文件名称
// for(String s:file1.list()) {
// System.out.println(s);
// }
// File file2=new File("F:\\ciyu\\test");//创建目录
// if(file2.mkdir()) {
// System.out.println("成功");
// }
// File file3=new File("F:\\ciyu\\test1");//创建多级目录
// if(file3.mkdirs()) {
// System.out.println("成功");
// }
// if(file3.delete()) {//删除文件或目录(不递归)在删除前需要删掉目录下的文件,正在使用的文件不能被删除,
// System.out.println("success");
// }else {
// System.out.println("faild");
// }
// delfile(file3);
// FileUtils.copyFile(file, file1,false);//复制文件到另一个文件,第三个参数为判断目标存在时是否覆盖
// FileUtils.copyDirectory(file, file1,false);//复制目录下文件到另一个目录,第三个参数为判断目标存在时是否覆盖
1.2、递归删除:
public static void delfile(File file) {//递归删除
if(file.isDirectory()) {
File[] listFiles = file.listFiles();
for(File file1:listFiles) {
delfile(file1);
}
file.delete();
}
file.delete();
}
2、文件的读写操作(分为字节流和字符流两种方式)
字节流:字节流读取的时候,读到一个字节就返回一个字节;主要用于读取图片,MP3,AVI视频文件。
字符流:字符流使用了字节流读到一个或多个字节,如读取中文时,就会一次读取2个字节。只要是处理纯文本数据,就要优先考虑使用字符流。
字符流和字节流的区别:
- 字节流操作的基本单元为字节;字符流操作的基本单元为Unicode码元。
- 字节流默认不使用缓冲区;字符流使用缓冲区。
- 字节流通常用于处理二进制数据,实际上它可以处理任意类型的数据,但它不支持直接写入或读取Unicode码元;字符流通常处理文本数据,它支持写入及读取Unicode码元。
2.1、字节流读写文件(InputStream、OutputStream):
File file=new File("F:\\ciyu\\ciyu.txt");
File file1=new File("F:\\ciyu\\ciyu1.txt");
//读取文件(字节流)
InputStream in = new FileInputStream(file);
//写入相应的文件
OutputStream out = new FileOutputStream(file1);
//读取数据
//in.read()一次读取一个字节
//一次性取多少字节
byte[] bytes = new byte[2048];
//接受读取的内容(n就代表的相关数据,只不过是数字的形式)
int n = -1;
//循环取出数据
while ((n = in.read(bytes,0,bytes.length)) != -1) {
//转换成字符串
System.out.println(n);
String str = new String(bytes,0,n,"utf-8"); //这里可以实现字节到字符串的转换,比较实用
System.out.println(str);
//写入相关文件
out.write(bytes, 0, n);
}
//关闭流
in.close();
out.close();
2.2、BufferedInputStream、BufferedOutputStream(缓存字节流)使用方式和字节流差不多,但是效率更高(推荐使用):
File file=new File("F:\\ciyu\\ciyu.txt");
File file1=new File("F:\\ciyu\\ciyu1.txt");
//读取文件(缓存字节流)
BufferedInputStream in = new BufferedInputStream(new FileInputStream(file));
//写入相应的文件
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file1));
//读取数据
//in.read()一次读取一个字节
//一次性取多少字节
byte[] bytes = new byte[2048];
//接受读取的内容(n就代表的相关数据,只不过是数字的形式)
int n = -1;
//循环取出数据
while ((n = in.read(bytes,0,bytes.length)) != -1) {
//转换成字符串
String str = new String(bytes,0,n,"GBK");
System.out.println(str);
//写入相关文件
out.write(bytes, 0, n);
}
//清楚缓存
out.flush();
//关闭流
in.close();
out.close();
2.3、InputStreamReader、OutputStreamWriter(字节流,这种方式不建议使用,不能直接字节长度读写)。使用范围用做字符转换:
File file=new File("F:\\ciyu\\ciyu.txt");
File file1=new File("F:\\ciyu\\ciyu1.txt");
//读取文件(字节流)
InputStreamReader in = new InputStreamReader(new FileInputStream(file),"utf-8");
//写入相应的文件
OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(file1));
//in.read()一次读取一个字节
//读取数据
//循环取出数据
char[] tempchars = new char[30];
int len = -1;
while ((len = in.read(tempchars)) != -1) {
System.out.println(len);
//写入相关文件
out.write(len);
}
//清楚缓存
out.flush();
//关闭流
in.close();
out.close();
2.4、BufferedReader、BufferedWriter(字符缓存流,提供readLine方法读取一行文本,推荐使用):
File file=new File("F:\\ciyu\\ciyu.txt");
File file1=new File("F:\\ciyu\\ciyu1.txt");
//读取文件(字符流)
BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(file),"utf-8"));
//BufferedReader in = new BufferedReader(new FileReader("d:\\1.txt")));
//写入相应的文件
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file1),"utf-8"));
//BufferedWriter out = new BufferedWriter(new FileWriter("d:\\2.txt"));
//读取数据
//循环取出数据
String str = null;
while ((str = in.readLine()) != null) {
System.out.println(str);
//写入相关文件
out.write(str);
out.newLine();
}
//清楚缓存
out.flush();
//关闭流
in.close();
out.close();
2.5、Reader、PrintWriter(PrintWriter这个很好用,在写数据的同事可以格式化):
File file=new File("F:\\ciyu\\ciyu.txt");
File file1=new File("F:\\ciyu\\ciyu1.txt");
//读取文件(字节流)
Reader in = new InputStreamReader(new FileInputStream(file),"utf-8");
//写入相应的文件
PrintWriter out = new PrintWriter(new FileWriter(file1));
//in.read()一次读取一个字节
//读取数据
//循环取出数据
char[] tempchars = new char[30];
int len = -1;
while ((len = in.read(tempchars)) != -1) {
System.out.println(len);
//写入相关文件
out.write(len);
}
//清楚缓存
out.flush();
//关闭流
in.close();
out.close();