我需要删除一个文件,名为:学习.txt ; 另外需要删除另一个文件webKindName.txt中的一行内容“学习”。
我的思路是先将webKindName.txt中除了“学习”这一行外的所有内容输出到一个临时文件“临时.txt”中,删除webKindName.txt,再将这个临时文件名改为webKindName.txt(这样就删除了该文件中的那一行);然后再删除文件“学习.txt”。
代码如下:import java.io.*;
import java.util.*;
public class Remove {
public static void main(String[] args){
  try {
String reKind="学习";
File inFile = new File("E:/Websites/webKindName.txt");//需要删除该文件中的某一行
File kindFile=new File("E:/Websites/"+reKind+".txt"); //需要删除的文件
File outFile = new File("E:/Websites/临时.txt");  //这是一个临时文件
BufferedReader br = new BufferedReader(new FileReader(inFile));
BufferedWriter bw = new BufferedWriter(new FileWriter(outFile));
String line1="";
for (String line=br.readLine(); 
       line != null; 
       line=br.readLine()) {
System.out.println("开始循环!");
    if (line.indexOf(reKind) > 0) { //找到这一行,跳过(但这个if总是无法执行)
     System.out.println("跳过"+reKind);
     continue;
    } //这个indexOf就可以判断是否存在特殊字符
    line1=line+'\n'; //得到文件中除了要删除的类型名外的每行内容
    String seperator=System.getProperty("line.separator");
line1=line1.replace("\n", seperator);//若不这样处理打印出的换行符就是一个黑点
    bw.write(line1);
    //bw.newLine();  
}
br.close();
bw.flush();
bw.close();
if (inFile.delete()&&kindFile.delete()) { //删除 webKindName.txt和对应的网站类型的文件
System.out.println("已经删除一个类型!");
    outFile.renameTo(inFile); //把 临时.txt改名为 webKindName.txt
}
System.out.println("Remove a kind!!");   //检验以上程序是否可以执行
} catch (IOException e) {
                  System.out.println("Erro!!");  //出现错误就提示
}
}
}但现在出现了两个问题:
问题一:同样一个程序,有时候运行后,文件名“webKindName.txt”变成了“临时.txt”,名字并没有复原;有时候正常。
问题二:程序中的for循环中的if(){}总是无法执行,“学习”这一行无法跳过,也就无法删除。System.out.println("跳过"+reKind);这一句是我做的标记,说明这个if总是无法执行。
恳求高手帮我解决这个问题,已经困扰我好几天了,不胜感激!

解决方案 »

  1.   

    if (line.indexOf(reKind) > 0) { //找到这一行,跳过(但这个if总是无法执行)这一行应该改为if (line.indexOf(reKind) != -1) 
      

  2.   

    >0和 != -1有啥区别啊? 菜鸟提问
    另外改成 !=-1后,我运行你的程序,就没有问题了,没出现变成临时。txt的状况
      

  3.   

    indexOf,没找到返回-1,找到了返回位置,包括0,所以>0会出问题
      

  4.   

    package com.zhongqin.test.other;import java.io.*;
    import java.util.*;
    public class TestRmove {
        public static void main(String[] args){
              try {
                String reKind="aa";
                File inFile = new File("E:/Websites/webKindName.txt");//需要删除该文件中的某一行
                File kindFile=new File("E:/Websites/"+reKind+".txt"); //需要删除的文件
                File outFile = new File("E:/Websites/t.txt");  //这是一个临时文件
                BufferedReader br = new BufferedReader(new FileReader(inFile));
                BufferedWriter bw = new BufferedWriter(new FileWriter(outFile));
                String line1="";
                for (String line=br.readLine(); 
                       line != null; 
                       line=br.readLine()) {
                    System.out.println("开始循环!");
                    if (line.indexOf(reKind) == 0) { //找到这一行,跳过(但这个if总是无法执行)
                        System.out.println("跳过"+reKind);
                        continue;
                    } //这个indexOf就可以判断是否存在特殊字符
                    line1=line+'\n'; //得到文件中除了要删除的类型名外的每行内容
                    String seperator=System.getProperty("line.separator");
                    line1=line1.replace("\n", seperator);//若不这样处理打印出的换行符就是一个黑点
                    bw.write(line1);
                    //bw.newLine();  
                }
                br.close();
                bw.flush();
                bw.close();
                if (inFile.delete()&&kindFile.delete()) { //删除 webKindName.txt和对应的网站类型的文件
                    System.out.println("已经删除一个类型!");
                    outFile.renameTo(inFile); //把 临时.txt改名为 webKindName.txt
                }
                System.out.println("Remove a kind!!");   //检验以上程序是否可以执行
            } catch (IOException e) {
                      System.out.println("Erro!!");  //出现错误就提示
            }
        }
    }中文有点问题,你该改成aa,我这里测试没问题
      

  5.   

    注意这行line.indexOf(reKind) == 0
      

  6.   

    我觉得是你reKind改成别的名字后,文件名字没有跟着改  
      

  7.   

    找到文件后用:File.delete()方法啊~
      

  8.   

    这个不会的,因为文件名就是reKind+”txt“。用reKind作参数就直接指向那个文件了。
      

  9.   

    你得调用cmd命令,java 是无法操作本地的-------------------------------
     编程菜鸟学堂QQ群144648357