IO流操作
使用递归的方法删除非空目录
package Demo;
import java.io.File;
public class Demo1 {
public static void main(String[] args) {
String dst = "e:\\del1";
File f = new File(dst);
del(new File("e:\\del1"));
if(f.exists() && f.isDirectory()) {
System.out.println(f.delete());
}
}
public static void del(File dir){
//判断是否为目录,不是目录就执行dir.delete();
if (dir.isDirectory()) {
File[] files = dir.listFiles();
//递归直到打开到方法的最低层跳出if执行delete
for(File file : files){
//判断是否为目录,如果是目录就继续打开,如果不是就跳出if
if(file.isDirectory()) {
del(file);
}
file.delete();
}
}
dir.delete();
}
}
运行程序到目录所在的地址发现del1目录删除成功
建立一个文件
package Demo;
import java.io.File;
import java.io.IOException;
public class Demo2 {
public static void main(String[] args) throws IOException {
String str = "E:\\Demo\\Demo.txt";
File file = new File(str);
file.createNewFile();
//测试此抽象路径名表示的文件是否为普通文件。
System.out.println(file.isFile());
//测试此抽象路径名表示的文件或目录是否存在。
System.out.println(file.exists());
//测试此抽象路径名表示的文件是否为目录
System.out.println(file.isDirectory());
}
}
程序结果
所在地址中发现所创建的文件即为成功
计算目录中共有多少文件共有多少行
package Demo;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.SQLOutput;
public class Demo3 {
static int num = 0;
static int rows = 0;
public static void main(String[] args) {
String dir = System.getProperty("file.separator");
dir = "D:\\ITBYjava\\javase";
File s = new File(dir);
count(s);
System.out.println("共" + rows + "行");
System.out.println("num");
}
public static void count(File src) {
if (src.isDirectory()) {
File[] files = src.listFiles();
for (File file : files) {
//递归
if (file.isDirectory()) count(file);
if (file.isFile() && file.getName().endsWith(".java")) {
++num;
rows += getFileRows(file);
}
}
}
}
public static int getFileRows(File src) {
int rows = 0;
try (FileInputStream fis = new FileInputStream(src)) {
//读取所有字节,获取行数,.count计数转换为int类型
rows = (int) new String(fis.readAllBytes()).lines().count();
} catch (Exception e) {
}
return rows;
}
}
程序结果
IO建立文件方式
package Demo;
import java.io.*;
import java.sql.SQLOutput;
public class Demo4 {
public static void main(String[] args) throws IOException {
//建立空文件
File f1 = new File("a.txt");
f1.createNewFile();
//建立文件并写入内容
PrintWriter out = new PrintWriter("b.txt");
out.write("hello - 中文\n");
out.printf("%tF %<TF%n", System.currentTimeMillis());
out.flush();
//字节流写入文件
FileOutputStream fos = new FileOutputStream("c.txt",true);
for (int i = 0; i < 10; i++) {
fos.write("97 - hello 中文写入\r\n".getBytes());
}
fos.close();
//字符流写入文件
FileWriter fw = new FileWriter("d.txt");
fw.write("hello 程序设计");
fw.close();
}
}
程序结果
读取文本内容
package Demo;
import java.io.*;
public class Demo6 {
public static void main(String[] args) throws Exception {
File file = new File("c.txt");
//字节流读取文件
FileInputStream in = new FileInputStream(file);
System.out.println(new String(in.readAllBytes()));
System.out.println("---------------------------------------");
//字符流读取文件
FileReader reader = new FileReader(file);
BufferedReader bis = new BufferedReader(reader);
while(bis.ready()){
System.out.println(bis.readLine());
}
}
}
程序结果
File类获取文件的信息,更名,移动,删除文件
package Demo;
import java.io.File;
import java.io.FileWriter;
public class Demo5 {
public static void main(String[] args) {
File file = new File("c.txt");
//文件信息
System.out.println(file.isFile());
System.out.println(file.exists());
//查询文件字节
System.out.println(file.length());
//查询文件创建时间
System.out.printf("%tF %<tT%n",file.lastModified());
//查询文件名
System.out.println(file.getName());
//查询文件相对路径
System.out.println(file.getPath());
//查询文件绝对路径
System.out.println(file.getAbsoluteFile());
//文件目录
String t = file.getAbsolutePath();
System.out.println(t.substring(0,t.lastIndexOf("\\")));
//文件基本名
System.out.println(t.substring(t.lastIndexOf("\\")+1,t.lastIndexOf(".")));
//文件扩展名
System.out.println(t.substring(t.lastIndexOf(".")));
//文件名修改(文件名修改不能修改文件后缀)
//file.renameTo(new File("c1.txt"));
//文件名修改也可以修改文件路径(剪切复制到一级目录),不能建立目录
//file.renameTo(new File("e:\\c1.txt"));
//文件删除
if(file.isFile()&& file.exists()){
file.delete();
}
}
}
程序结果(获取到文件信息且c.txt文件被删除)
文件copy
package Demo;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class Demo7 {
public static void main(String[] args) {
//注:"只能把文件copy到最低层目录"
String f1 = "e:\\1.jpg";
try (
var is = new FileInputStream(f1);
var os = new FileOutputStream("e:\\picture\\1.jpg");
) {
//法一:将is里的全部读取到os,硬件条件不满足时会卡死,风险较高
//os.write(is.readAllBytes());
//法二:将is里的字节一个一个读取到os里,效率较低
//int b = 0;
//while ((b = is.read()) != -1) {
// os.write(b);
//}
//法三:transferTo方法按照8k的内存copy,可以复制系统方法通过修改内存来满足项目需求
//is.transferTo(os);
byte[] buffer = new byte[1024*25];
int read;
while ((read = is.read(buffer)) >= 0) {
os.write(buffer, 0, read);
}
} catch (Exception e) {
}
}
}
运行结果