JAVA File类 删除文件

/**输入指定名字的文件(如a.txt)*在E盘根目录下,遍历E盘文件,查找是否存在该文件*如果存在删除该文件,不存在显示该文件不存在*/publicclassTest2... /*
* 输入指定名字的文件(如 a.txt)
* 在E盘根目录下,遍历E盘文件 ,查找是否存在该文件
* 如果存在删除该文件,不存在显示该文件不存在
*/
public class Test2001 {
private static String s;
public static void main(String[] args) {
test1();//删除文件
}
private static void test1() {
System.out.println("请输入你要删除的文件名");
s=new Scanner(System.in).next();
File file=new File("E:/");
deleteFile(file);
}
private static void deleteFile(File file) {
File Array[]=file.listFiles();
for(File f:Array)
if(f.isFile()){//如果是文件
if(f.getName()==s){
f.delete();
System.out.println("删除文件成功");
break;
}else{//如果不是要删除的文件,跳到下一次循环
continue;
}
}else{//如果不是文件
deleteFile(file);
}

System.out.println("删除文件失败,该文件不存在");
}
}

求大神救救我,一直错,我要崩溃了
deleteFile(file);这一行报错
展开
 我来答
百度网友faadf46
高粉答主

2020-04-29 · 说的都是干货,快来关注
知道答主
回答量:4556
采纳率:0%
帮助的人:73.8万
展开全部

1、创建File对象File(String pathname):pathname录入时录入的路径字符串需要注意/和\的运用,但是由于java开发出的程序需要运用到不同的系统上,因此,一般以File.separator来代替。

2、创建File对象File(File parent,String child):此为创建文件对象的另外一种方式,parent为已创建的对象,这种情况,parent一般为文件夹的路径,child为文件的名称。

3、判断File对象是否是一个文件:isFile()返回值true为文件,false为非文件。如下程序中,由于file1对象为文件夹,非文件,返回为false;file2对象为文件,返回true。

4、文件的内容长度(占用字节):length()当前File对象所表示的文件所占用的字节量。在testFile1.txt中事先录入部分数据,file2指向的File对象,内容长度为8。

5、判断文件是否存在,在硬盘创建文件前,一般需要判断硬盘中文件是否存在,如果不存在才创建文件,这样可以避免文件重复创建。

6、文件创建:createNewFile()当File对象调用文件创建方法后,硬盘中文件才会被创建。

百度网友090def6
推荐于2017-11-26 · TA获得超过2211个赞
知道小有建树答主
回答量:558
采纳率:100%
帮助的人:709万
展开全部

你程序中有个错误,并且逻辑有问题,代码修改了,如下:

public class Test2001 {
private static String s;

public static void main(String[] args) {
test1();// 删除文件
}

private static void test1()  {
System.out.println("请输入你要删除的文件名");
s = new Scanner(System.in).next();
File file = new File("E:/");
deleteFile(file);
}

private static void deleteFile(File file) {
File Array[] = file.listFiles();
for (File f : Array) {
if (f.isFile()) {// 如果是文件
if (f.getName().equals(s)) {
f.delete();
System.out.println("删除文件成功");
return;
}
}
}
System.out.println("删除文件失败,该文件不存在");
}
}

 1.错误

    判断文件名是否相等:if(f.getName()==s) 

    字符串判断值是否相等使用equals方法,==是比较内存地址,所以你的for一直匹对不到相同文件

2. 逻辑错误

  

private static void deleteFile(File file) {
File Array[] = file.listFiles();
for (File f : Array) {
if (f.isFile()) {// 如果是文件
if (f.getName() == s) { // 这里已经在比较文件是否相等
f.delete();
System.out.println("删除文件成功");
break;
} else {// 如果不是要删除的文件,跳到下一次循环
continue;
}
} else {// 如果不是文件
deleteFile(file); // 这里
}
}
System.out.println("删除文件失败,该文件不存在");
}

if (f.isFile()) {// 如果是文件
}
} else {// 如果不是文件
deleteFile(file); // 这里不需要再次deleteFile,只会迭代,按钮的逻辑,不是文件,就跳过,应该是continue

}


亲,如果回答满意,请即时采纳,你的理解是我回答的动力,谢谢!!!

更多追问追答
追问
还是有错...Exception in thread "main" java.lang.StackOverflowError
at java.io.File.list(Unknown Source)
at java.io.File.listFiles(Unknown Source)
追答
错误解决了,就不存在异常了
if (f.isFile()) {// 如果是文件
}
} else {// 如果不是文件
deleteFile(file); // 还是这里的问题,file在上面已在操作,你在迭代,引起问题
}

判读错误,导致这里不停迭代,其实就是个死循环,然后系统异常
StackOverflowError表示堆载溢出,因为死循环,一直记录deleteFile(file)的执行信息,直到溢出
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
开发者经验库
2014-04-28 · TA获得超过383个赞
知道小有建树答主
回答量:465
采纳率:0%
帮助的人:290万
展开全部
报什么错?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式