按照字符进行数据读
按字符进行数据写
删除文件,需要控制台输入文件路径(大)和模糊文件名
package Io;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class DeleteFile {
//删除所在目录(可以往深的文件)
//用户输入一个目录
//再输入一个要删除的文件名
//找到名称中包含指定字符的所有普通文件
//询问用户是否要删除该文件
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入 要扫描的总路径(目录)");
String rootDirectoryPath = sc.next();
System.out.println("请输入 要删除的文件相关 关键字");
String deleteFileName = sc.next();
//创建File 对象 判断是否正确目录
File rootPath = new File(rootDirectoryPath);
if(!rootPath.isDirectory()){
System.out.println("输入有误的 目录路径");
return;
}
List<File> list = new ArrayList<>();
scanDir(rootPath,deleteFileName,list);
System.out.println("搜索到了"+list.size()+"这么多相关文件");
for(File f:list){
deleteFile(f);
}
//文件真的用户输入 删除了 也不会更新呢list 的大小的 下面这句话永远都是不操作的大小
System.out.println("还有这么多文件不需要被处理"+list.size());
}
public static void scanDir(File file,String deleteName,List<File> list){
File[] files = file.listFiles();
if(file==null||files.length==0) return ;
for(File f: files){
if(f.isDirectory()) {
//继续递归
scanDir(f, deleteName, list);
}else{
//进行删除
if(f.getName().contains(deleteName)){
list.add(f.getAbsoluteFile());
}
}
}
}
public static void deleteFile(File f){
try {
System.out.println("你要删除这个文件么?"+f.getName()+"路径为"+f.getCanonicalPath());
System.out.println("请输入y");
Scanner sc = new Scanner(System.in);
String c = sc.next();
//对于String 里的 变小写 要用字符串比较 不能是单引号
// 要不认为永远是false
if(c.toLowerCase().equals("y")){
f.delete();
System.out.println("删除成功");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
文件拷贝(图片什么都能)
package Io;
import java.io.*;
import java.util.Scanner;
public class FileCope {
// 普通文件的复制
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入 要赋值文件的路径(文件)");
String sour = sc.next();
System.out.println("请输入 要粘贴文件的路径");
String dest = sc.next();
File sourFile = new File(sour);
if (!sourFile.exists()) {
System.out.println("不存在这个地址");
return;
}
if (!sourFile.isFile()) {
System.out.println("文件路径有问题");
return;
}
File destFile = new File(dest);
if (destFile.isDirectory()) {
System.out.println("您输入的是要粘贴的目录,不能处理");
return;
} else if (destFile.isFile()) {
System.out.println("您输入的原来已有这个文件,我要覆盖娄");
}
try (InputStream inputStream = new FileInputStream(sourFile)) {
try (OutputStream outputStream = new FileOutputStream(destFile)) {
byte[] buffer = new byte[1024];
while (true) {
int len = inputStream.read(buffer);
if (len == -1) break;
//这个缓冲数组 可能没有填满 就要传入 长度
outputStream.write(buffer, 0, len);
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
删除用户输入的带有相关文字的文件
package Io;
import java.io.*;
import java.util.Scanner;
public class DT {
//扫描指定目录,并找到名称或者内容中包含指定字符的所有普通文件
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
System.out.println("请输入 要扫描的总路径(目录)");
String rootDirectoryPath = sc.next();
System.out.println("请输入 要删除的文件包含的相关 字句等");
String deleteFileName = sc.next();
File rootDir = new File(rootDirectoryPath);
if(!rootDir.isDirectory()){
System.out.println("大哥,我要目录");
return;
}
scanDir(rootDir,deleteFileName);
}
public static void scanDir(File rootDir,String words) throws IOException {
File[] files = rootDir.listFiles();
if(files==null) return;
for(File f:files){
if(f.isDirectory()){
scanDir(f,words);
}else{
if(isContains( f,words)){
System.out.println(f.getCanonicalPath());
}
}
}
}
public static boolean isContains(File f,String words){
StringBuilder stringBuilder = new StringBuilder();
try(Reader reader = new FileReader(f)){
char[] buffer = new char[1024];
while(true){
int len = reader.read(buffer);
if(len==-1) break;
stringBuilder.append(buffer,0,len);
}
}catch(IOException e){
e.printStackTrace();
}
return stringBuilder.indexOf(words)!=-1;
}
}