现在在做毕设  遇到最后一个问题  希望可以得到帮助  我把文件中的字符串读出来,然后删除特定的字符串  然后保存  但是现在的问题是 读出来后字符串原来的格式都没有了 怎样读写才可以保留原有文件的格式呢?
下面是我的代码  希望高手指教了  
File file = new File(fileP); 
try {
FileReader fd2 = new FileReader(file.getPath());
BufferedReader br2 = new BufferedReader(fd2);
//System.out.println(br2);
try {
while((filetext2 = br2.readLine())!=null){
ft2 +=filetext2;
}

ft2 = ft2.replaceAll("\r\n","").replaceAll(" ","").replaceAll(fF,"");
br2.close();
} catch (IOException e1) {

}
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
try {
FileWriter fw2 = new FileWriter(file.getPath());
BufferedWriter bw3 = new BufferedWriter(fw2);
if(ft2.contains("null")){
ft2.replaceAll("null","");
}
bw3.write(ft2);
bw3.flush();
bw3.close();
} catch (IOException e1) {
e1.printStackTrace();
}

解决方案 »

  1.   

    有个东东叫续写
    看我的回答,应该有你要的
    http://topic.csdn.net/u/20090524/14/7daeec93-ad67-49c9-b0bf-f48260be2a6b.html
      

  2.   

        你把格式都给人家replace了,能有格式才怪
      

  3.   

    81328010群号JAVA技术交流(总群)欢迎您的加入 我的口号是:不要留念过去的成功,不要计较眼前的失败,不要畏惧未来的艰难,失败只不过是给我们重新的开始和更加聪明行事的一个机会一次失败而不代表一生的失败 加油!
      

  4.   

    不太明白楼主到底想达到什么样的目的从楼主提供的程序来看,楼主的意图应该是把文件中的字符串都去掉吧,其中的
    null
    n,ull
    n ull
    n u l l 
    n      ll
    n\r\null
    等都在被去除之列?
      

  5.   

    ft2 +=filetext2 + "\n";你所说的格式是不是换行符没了,因为你把源文件的类容全部保存在一行中了。需要加上换行符
      

  6.   


    恩  比如  我有个文件中的内容是:
    aaabbb   ccc
    ddd
    现在有个特定字符串 是  bbbccc    文件中如果包含了就要删掉  因为程序中的空格是不影响功能的  所以我要先去掉空格后匹配  包含字符串删掉后的文件内容我希望可以是:
    aaaddd    
    可以实现这样的功能么?
      

  7.   

    没问题啊  
    aaabbb  ccc
    ddd 
    读出bbb  ccc这一行的时候 去掉空格后匹配是否和bbbccc相同 要是相同则删除这一行???你要的不是这样的效果么?
      

  8.   

    a.txt中原文:
    aaabbb ccc
    ddd运行后:
    aaa
    ddd是不是你要的效果?代码:
    File file = new File("D:/a.txt"); 
    String filetext2 = "";
    String ft2 = "";
    String fF = "bbbccc";
    try {
    FileReader fd2 = new FileReader(file.getPath());
    BufferedReader br2 = new BufferedReader(fd2); 

    try { 
    while((filetext2 = br2.readLine())!=null){
    filetext2 = filetext2.replace(" ", "").replace(fF, "");

    ft2 = ft2 + filetext2 + "\r\n"; 


            br2.close(); 
    } catch (IOException e1) {



    catch (FileNotFoundException e1) {
    e1.printStackTrace(); 

    try { 
    FileWriter fw2 = new FileWriter(file.getPath());
    BufferedWriter bw3 = new BufferedWriter(fw2); 
    if(ft2.contains("null")){
    ft2.replaceAll("null","");

    bw3.write(ft2); 
    bw3.flush();
    bw3.close(); 
    } catch (IOException e1) {
    e1.printStackTrace();
    }
    }
      

  9.   


                    File file = new File("D:/a.txt"); 
    String filetext2 = "";
    String ft2 = "";
    String fF = "bbbccc";
    try {
    FileReader fd2 = new FileReader(file.getPath());
    BufferedReader br2 = new BufferedReader(fd2); 

    try { 
    while((filetext2 = br2.readLine())!=null){
    filetext2 = filetext2.replace(" ", "").replace(fF, "");

    ft2 = ft2 + filetext2 + "\r\n"; 

       br2.close(); 
    } catch (IOException e1) {



    catch (FileNotFoundException e1) {
    e1.printStackTrace(); 

    try { 
    FileWriter fw2 = new FileWriter(file.getPath());
    BufferedWriter bw3 = new BufferedWriter(fw2); 
    if(ft2.contains("null")){
    ft2.replaceAll("null","");

    bw3.write(ft2); 
    bw3.flush();
    bw3.close(); 
    } catch (IOException e1) {
    e1.printStackTrace();
    }
    }
      

  10.   

    你好  如果是消除  cccddd  呢?麻烦了  因为要考虑换行和空格两种情况   
      

  11.   

    这个需要自己写算法我的思路是,在内存中有一片缓冲区 sbBuffer,然后一个一个地从源中读取字符。
    当缓冲区空时,如果读取的字符是'n',也就是开头字符,则把它放到缓冲区中,同时把缓冲区中有效字符数(bufferPoint)加上1
    在后来的读字符过程中,可能会遇到几种情况:
    读进来的是可以用于忽略的字符,比如' ', '\r', '\n', ',',这时应该把它继续放到缓冲区
    如果读进来的字符破坏了缓冲区的秩序,比如缓冲区中有字符串“n,,,,u,,”,而读入的字符是'a',则认为缓冲区秩序将被破坏,这时应该把缓冲空保存的字符串和最后读入的字符放到结果集的字符串中去。
    如果读入的字符串能够保持缓冲区中的秩序,比如缓冲区中有字符串"n u,,,l",则把它追加到缓冲区中去。如果缓冲区中存放的字符串已经可以进行格式化,也就是在却除了可忽略的字符串后存在一个子串"null",则将缓冲区中的字符串格式化之后,追加到结果集,并清空缓冲区。下面是实现代码,但是测试的数据不是很多,估计还会有一些 bug
    package stu.test;import java.io.*;public class TestCatchString{
    // 将要被忽略的单词
    private final String skipString = "null";

    // 单词中间可以允许存在的字符
    private final char[] ignoreCharactors = new char[]{
    ' ', ',', '\r', '\n'
    };

    private StringBuilder sbResult = new StringBuilder();
    private StringBuilder sbBuffer = new StringBuilder();
    // 用于指示缓冲区中有效字符集的个数,比如缓冲区中值为"n u l"、""n,,,,u\r\nl或"nu    l"时,该值为3
    private int bufferPoint = 0;

    // 检查字符是否是要被忽略的字符
    private boolean isIgnoreChar(char data){
    for(char item : ignoreCharactors){
    if(item == data)
    return true;
    }
    return false;
    }

    // 判断是否应该将当前的字符放到缓冲区
    private boolean shouldPushToBuffer(char data){
    if(data == skipString.charAt(bufferPoint)){
    bufferPoint++;
    return true;
    }

    if(sbBuffer.length() > 0){
    // 如果缓冲区中有数据,比如:n u
    if(isIgnoreChar(data)){
    // 如果当前读入的是一个可忽略的字符,如' ',因为此时缓冲区中有数据,因此将此字符放入缓冲区 
    return true;
    }else{
    // 如果当前读入的是不可忽略的字符,如 'a',此时应该把缓冲区中保存的字符全部放到sbResult中去
    bufferPoint = 0;
    return false;
    }
    }else{
    return false;
    }
    }

    private boolean bufferOK(){
    return (bufferPoint == skipString.length());
    }

    private void clearBuffer(){
    if(sbBuffer.length() > 0)
    this.sbBuffer.delete(0, sbBuffer.length());
    this.bufferPoint = 0;
    }
    private String formatBuffer(){
    for(int i = 0; i<skipString.length(); i++){
    int index = sbBuffer.indexOf(skipString.substring(i, i+1));
    sbBuffer.replace(index, index + 1, "");
    }

    String result = sbBuffer.toString();

    this.clearBuffer();

    return result;
    }

    public void skipString(Reader reader){
    int charData = -1;
    while(true){
    try{
    charData = reader.read();
    }catch(Exception ex){
    ex.printStackTrace();
    return;
    }

    // 已经到达流的末尾
    if(charData == -1){
    if(sbBuffer.length() > 0){
    sbResult.append(sbBuffer.toString());
    }
    return;
    }

    char data = (char)charData;

    if(shouldPushToBuffer(data)){
    sbBuffer.append(data);

    // 将字符放到缓冲区后,判断缓冲区中字符串是否合格
    if(bufferOK()){
    sbResult.append(formatBuffer());
    }
    }else{
    // 此次读入的字符将破坏缓冲区中的秩序
    sbResult.append(sbBuffer.toString());
    sbResult.append(data);

    this.clearBuffer();
    }
    }

    }

    public String getResult(){
    String result = sbResult.toString();
    sbResult.delete(0, result.length() - 1);
    sbResult = null;
    return result;
    }

    public TestCatchString(){
    }

    public static void main(String[] args){
    // 准备被测试的字符串
    StringBuilder sbSource = new StringBuilder();
    sbSource.append("abc--null--\r\n"); // 被处理
    sbSource.append("abc--nu\r\nll--\r\n"); // 被处理
    sbSource.append("abc--n,,,,,,ull--\r\n"); // 被处理
    sbSource.append("abc--n,,u,,l  l--\r\n"); // 被处理
    sbSource.append("abc--n-u,ll--\r\n"); // 不被处理

    String source = sbSource.toString();

    Reader reader = new StringReader(source);

    TestCatchString obj = new TestCatchString();
    obj.skipString(reader);
    String result = obj.getResult();

    System.out.println(source);
    System.out.println("--------------------------------");
    System.out.println(result);
    }
    }