在java中创建,编写和编辑相同的文本文件

时间:2013-12-24 01:24:35

标签: java file-io text-files

假设我有以下代码:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class EditFile {

    public static void main(String[] args) {

        try{
            String verify, putData;
            File file = new File("file.txt");
            file.createNewFile();
            FileWriter fw = new FileWriter(file);
            BufferedWriter bw = new BufferedWriter(fw);
            bw.write("Some text here for a reason");
            bw.flush();
            bw.close();
            FileReader fr = new FileReader(file);
            BufferedReader br = new BufferedReader(fr);
            while( br.readLine() != null ){
                verify = br.readLine();
                if(verify != null){
                    putData = verify.replaceAll("here", "there");
                    bw.write(putData);
                }
            }
            br.close();


        }catch(IOException e){
        e.printStackTrace();
        }
    }

}

我想要做的就是在文本文件中写一些东西,在我的例子中“有些文字出于某种原因”。然后从我的文件中读取数据,最后从我的文件中更改我的文本中的“有些文本出于某种原因”在“有些文本中出于某种原因”。我运行了代码,但所有这一切都是在我的文件中写入“有些文本出于某种原因”。

我试图弄清楚我的代码中可能出现什么问题,但不幸的是,这是徒劳的。我非常感谢任何建议或改写。

5 个答案:

答案 0 :(得分:6)

将您的代码更改为:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class EditFile {

    public static void main(String[] args) {

        try{
            String verify, putData;
            File file = new File("file.txt");
            file.createNewFile();
            FileWriter fw = new FileWriter(file);
            BufferedWriter bw = new BufferedWriter(fw);
            bw.write("Some text here for a reason");
            bw.flush();
            bw.close();
            FileReader fr = new FileReader(file);
            BufferedReader br = new BufferedReader(fr);

            while( (verify=br.readLine()) != null ){ //***editted
                       //**deleted**verify = br.readLine();**
                if(verify != null){ //***edited
                    putData = verify.replaceAll("here", "there");
                    bw.write(putData);
                }
            }
            br.close();


        }catch(IOException e){
        e.printStackTrace();
        }
    }

}

问题是你正在调用br.readLine()两次,这会激发应用程序读取line1然后是line2,在你的情况下,你只有一行,这意味着你的程序以条件形式读取它,当它将它声明为变量verify,它正在停止,因为您没有更多数据来读取您的文件。

答案 1 :(得分:1)

我会这样做:

import java.io.*;

public class EditFile {

public static void main(String[] args) {

    try{
        String verify, putData;
        File file = new File("file.txt");
        file.createNewFile();
        FileWriter fw = new FileWriter(file);
        BufferedWriter bw = new BufferedWriter(fw);
        bw.write("Some text here for a reason");
        bw.flush();

        FileReader fr = new FileReader(file);
        BufferedReader br = new BufferedReader(fr);

        while( (verify=br.readLine()) != null )
        { 
            if(verify != null)
            {
                putData = verify.replaceAll("here", "there");
                bw.write(putData);
            }
        }
        br.close();
        bw.close();

    }catch(IOException e){
    e.printStackTrace();
    }
}
}

答案 2 :(得分:0)

使用此代码,我用它来删除java文件中的日志和System.out语句。 只需更改匹配和替换字符串。

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class FileReplace {
    List<String> lines = new ArrayList<String>();
    String line = null;
    Scanner scan = null;

    public void doIt() {
        scan = new Scanner(System.in);

        while (true) {
            try {

                System.out
                        .println("enter qualified file name ex.D:\\shiv\\shiv android all\\Main work space\\Welcomescreen1.java");
                String path = scan.nextLine();
                File f1 = new File(path);
                FileReader fr = new FileReader(f1);
                BufferedReader br = new BufferedReader(fr);
                int i = 0;
                while ((line = br.readLine()) != null) {
                    if (line.contains("System.out")) {
                        line = line.replace("System.out", "//");
                    } else if (line.contains("Log.")) {
                        line = line.replace("Log", "//");
                    }

                    lines.add(i, line);
                    i++;
                }
                fr.close();
                br.close();

                FileWriter fw = new FileWriter(f1);
                BufferedWriter out = new BufferedWriter(fw);
                for (int j = 0; j < lines.size(); j++) {
                    System.out.println(j + "." + lines.get(j));
                    out.append(lines.get(j));
                    out.newLine();
                }

                out.flush();
                out.close();

                System.out
                        .println("====================work done===================");

            } catch (Exception ex) {
                ex.printStackTrace();
            }

        }

    }

    public static void main(String args[]) {

        FileReplace fr = new FileReplace();

        fr.doIt();

    }
}

答案 3 :(得分:0)

import java.io.*;

public class TextFile
{
    public static void main(String[] args)
    {
        try
        {
            String verify, putData;
            File file = new File("G:\\Dairy.txt");
            file.createNewFile();
            FileWriter fw = new FileWriter(file);
            BufferedWriter bw = new BufferedWriter(fw);
            bw.write("I am Shah Khalid");
            bw.flush();

            FileReader fr = new FileReader(file);
            BufferedReader br = new BufferedReader(fr);

            while( (verify=br.readLine()) != null )
            { 
                if(verify != null)
                {
                    putData = verify.replaceAll("here", "there");
                    //bw.write(putData); 
                }
            }
            br.close();
            bw.close();
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }
        System.out.println("Shah");
    }
}

无需输入bw.write(putData);,因为它只会打印两次声明 无论你想要什么样的文件,只需给出正确的文件路径并相应地使用上面的代码。

答案 4 :(得分:-1)

        File file = new File("/tmp/my.txt");
        FileWriter fw;
        BufferedReader br;
        BufferedWriter bw;
        boolean no=false;
        String line;
        String data="";
        String lessonPath="my new line";

    try {
    if(!file.exists()){
        fw = new FileWriter(file);
        bw = new BufferedWriter(fw);
        bw.write(lessonPath);
        bw.flush();
        bw.close();

    }else{

        br = new BufferedReader(new FileReader(file));


        while((line =br.readLine()) !=null){
           if(!no){
           data=line;
           no=true;
           }else{
               data = data+"\n"+line;
           }   
       }
        bw = new BufferedWriter(new FileWriter(file));
        bw.write(data+"\n"+lessonPath);
        bw.flush();
        bw.close();

    }     

    } catch (Exception ex) {
        ex.printStackTrace();
    }