1.创建文件
public static boolean createFile(String filePath){
boolean result = false;
File file = new File(filePath);
if(!file.exists()){
try {
result = file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
return result;
}
2. 创建文件夹
public static boolean createDirectory(String directory){
boolean result = false;
File file = new File(directory);
if(!file.exists()){
result = file.mkdirs();
}
return result;
}
3.删除文件
public static boolean deleteFile(String filePath){
boolean result = false;
File file = new File(filePath);
if(file.exists() && file.isFile()){
result = file.delete();
}
return result;
}
4.递归删除目录中的指定文件
public static void main(String[] args) {
System.out.println("请输入正确的目录:");
Scanner scanner =new Scanner(System.in);
String rootpath=scanner.nextLine();
//先判断这个是不是一个目录,再进行下面的操作
File file=new File(rootpath);
if(!file.isDirectory()) {
System.out.println("输入的目录有误");
return ;
}
System.out.println("请输入文件中想要查找的关键词:");
String word=scanner.nextLine();
File[] files=file.listFiles();
for (File file1:files) {
//分开处理
//如果是一个文件就看是否包含了关键词
if(file1.isFile()) {
checkDeleteFile(file1,word);
} else {
//扫描文件
scanDirectory(file1,word);
}
}
}
private static void scanDirectory(File file1, String word) {
if(file1==null) {
return ;
}
File[] files=file1.listFiles();
if(file1.isDirectory()) {
for(File file:files) {
System.out.println("当前扫描的路径为:"+file.getPath());
if(file.isDirectory()) {
scanDirectory(file,word);
} else {
checkDeleteFile(file,word);
}
}
}
}
private static void checkDeleteFile(File file1, String word) {
if(!file1.getName().contains(word)) {
return ;
}
//接下来就是该真正的删除了
System.out.println("当前文件:"+file1.getAbsolutePath()+"是否要删除:(Y/n)");
Scanner scanner =new Scanner(System.in);
String choice=scanner.nextLine();
if(choice.equals("y")||choice.equals("Y")) {
file1.delete();
System.out.println("删除成功");
} else {
System.out.println("取消删除");
}
}
4.文件写入操作
这里所谓的写入操作是指我们将硬盘的文件内容写入到内存中,文件操作的角度应该站在内存的角度上来的看的。
1.按字节的形式进行读取数据
public static void main(String[] args){
//这是按照字节进行输出
try(InputStream inputStream=new FileInputStream("d:/test.txt")) {
byte [] buf=new byte[1024];
int len =inputStream.read(buf);
System.out.println("len "+len);
for(int i =0;i<len;i++) {
System.out.printf("%x\n", buf[i]);
}
}catch(Exception e) {
e.printStackTrace();
}
}
以上这种读取方式,是按照字节流,也就是一个字节一个字节将文件的内容读取到这个byte数组中。 读到数组的中的内容全是ASCII值,之后以十六进制的形式打印出来。
2.按字符进行读取数据
//将字节流转化为字符流直接输出
try(InputStream inputStream=new FileInputStream("d:/test.txt")) {
Scanner scanner=new Scanner(inputStream);
while(scanner.hasNextLine()) {
String str=scanner.nextLine();
System.out.println(str);
}
} catch (IOException e) {
throw new RuntimeException(e);
}
将字节流转化成一个字符流,一行的一行的进行读取出来。 以上这种方式我们直接读取到一个字符串中直接输出了。这样我们拿不到全部文件内容。我们可以使用StringBuffer来进行获取到全部数据
StringBuffer stringBuffer=new StringBuffer();
//将字节流转化为字符流直接输出
try(InputStream inputStream=new FileInputStream("d:/test.txt")) {
Scanner scanner=new Scanner(inputStream);
while(scanner.hasNextLine()) {
String str=scanner.nextLine();
stringBuffer.append(str);
stringBuffer.append("\n");
}
} catch (IOException e) {
throw new RuntimeException(e);
}
System.out.println(stringBuffer);
这样我们就可以获取到文件的全部内容了。注意:由于我们在读取文件的时候是一行进行读取的,所以在向stringbuffer中追加的时候 加上换行。
5.文件输出操作
所谓文件输出操作是指在应用程序上向硬盘文件中写入数据。
1.按字节的形式进行输出数据
try(InputStream is=new FileInputStream(scrfile)) {
try(OutputStream os=new FileOutputStream(destFile,true)) {
byte [] buf=new byte[1024];
int len;
while(true) {
len=is.read(buf);
if(len==-1) {
break;
}
os.write(buf,0,len);
}
os.flush();
}
先将scrfile文件的内容读取到一个字节数组中,然后再这个字节数组的内容写入到destfile文件中。
注意:之所以用flush是因为有一个缓冲区,内容先写入到由内存构成的缓冲区,再写入到硬盘的文件中,写入到内存中的速度是写入到硬盘中的速度上千倍,此时如果不及时的去刷新缓冲区,进程结束,这份数据也就丢失了。同时也要记得在使用完文件的时候,要记得关闭文件,不关闭文件大概率会造成文件资源泄露。 文件资源泄露是因为在打开一个文件的时候,进程中有一个文件描述表。这里没有进行关闭文件的操作是因为,这个文件的使用生命周期很短,而且是全局使用的,进程结束了,文件描述表自然也就销毁了。
2.按照字符的形式进行输出数据
try (OutputStream os = new FileOutputStream("d:/test.txt")) {
//这里还是将一个字节流转化成一个字符流
try (OutputStreamWriter osWriter = new OutputStreamWriter(os, "UTF-8")) {
//这里再包裹一层是,利用prinln的特性将字符串转化成字符写入到OutputStreamWriter中
try (PrintWriter writer = new PrintWriter(osWriter)) {
writer.println("你好世界");
writer.flush(); // 进行数据刷新操作
}
}
}
}
6.文件复制
public static void main(String[] args) throws IOException {
//文件的复制
Scanner scanner =new Scanner(System.in);
System.out.println("请输入源文件绝对路径:");
String srcFile=scanner.nextLine();
File scrfile=new File(srcFile);
//先要判断文件在不在,在的话,仍要判断文件是不是一个目录
if(!scrfile.exists()) {
System.out.println("输入的文件不存在,输入有误");
return ;
}
if(scrfile.isDirectory()) {
System.out.println("输入的是一个目录,输入有误");
return ;
}
//然后开始输入目的文件,仍要判断目的文件在不在
System.out.println("请输入目的文件的绝对路径: ");
String destFile=scanner.nextLine();
File destfile=new File(destFile);
if(!destfile.exists()) {
System.out.println("输入的文件不存在,输入有误");
return ;
}
if(destfile.isDirectory()) {
System.out.println("输入的是一个目录,输入有误");
return ;
}
System.out.println("开始复制文件");
try(InputStream is=new FileInputStream(scrfile)) {
try(OutputStream os=new FileOutputStream(destFile,true)) {
byte [] buf=new byte[1024];
int len;
while(true) {
len=is.read(buf);
if(len==-1) {
break;
}
os.write(buf,0,len);
}
os.flush();
}
System.out.println("复制成功");
}
}