Java的!必须计算文件中的符号

时间:2015-07-07 19:28:08

标签: java file count

我做了代码,但结果是0。你能帮我解决这个问题吗?提前致谢

注意:不应将空白或空格视为符号。

import java.util.*;
import java.io.*;



public class KerkoSimbolet{

    private File fileIn;    

    public KerkoSimbolet(File fileIn){
        this.fileIn = fileIn;
    }

    public void countSymbols()throws IOException{
        int count = 0;
        FileReader reader = new FileReader(fileIn);
            FileWriter fw = new FileWriter("donati");

        try{
            while(reader.read()!= -1){
                //if(!reader.equals(" "))
                    count++;
            }
        }
        catch(IOException e){
            e.printStackTrace();
        }
        finally{
            reader.close();
        }
        try{
            fw.write(count);
            fw.flush();
        }
        catch(IOException e){
            e.printStackTrace();
        }
        finally{
            fw.close();
        }
    }

    public static void main(String []arg){

        File fi = new File("ubt.txt");
        KerkoSimbolet ks = new KerkoSimbolet(fi);
        try{
            ks.countSymbols();
        }
        catch(IOException e){
            e.printStackTrace();
        }
    }
}

有时我会使用阿尔巴尼亚语,因为家庭作业来自那里。

下面我提出的新代码计算空间

import java.util.*;
import java.io.*;

public class KerkoSimbolet{

private File fileIn;

public KerkoSimbolet(File fileIn){
    this.fileIn = fileIn;
}

public void countSymbols()throws IOException{
    int count = 0;
    FileReader reader = new FileReader(fileIn);
    FileWriter fw = new FileWriter("donati");

    try{
        while(reader.read()!= -1){
            if(!reader.equals(""))
                count++;
        }
    }
    catch(IOException e){
        e.printStackTrace();
    }
    finally{
        reader.close();
    }
    try{
        fw.write(Integer.toString(count));
        fw.flush();
    }
    catch(IOException e){
        e.printStackTrace();
    }
    finally{
        fw.close();
    }
}

public static void main(String []arg){

    File fi = new File("ubt.txt");
    KerkoSimbolet ks = new KerkoSimbolet(fi);
    try{
        ks.countSymbols();
    }
    catch(IOException e){
        e.printStackTrace();
    }
}

}

2 个答案:

答案 0 :(得分:2)

问题在于你如何编写计数,而不是计算本身。根据{{​​3}},FileWriter#write(int)

  

写一个字符。

这不是你想要的(我猜)。正确的实施将是

public void countSymbols() throws IOException{
    int count = 0;
    try(FileReader reader = new FileReader(fileIn)) {
        int cread;
        while((cread = reader.read()) != -1){
            //if(!reader.equals(" "))
                count++;
        }
    }
    try(FileWriter fw = new FileWriter("donati")) {
        fw.write(Integer.toString(count));
    }
}

答案 1 :(得分:0)

你的

   while(reader.read()!= -1){
            //if(!reader.equals(" ")) // I think you wanted to use reader.read() here 
                count++;
        }
一旦你读到一个你必须将它存储在一个变量中的字符,然后检查它是否是space

也是错误的

执行以下操作:

        int input;
        try{
             while((input = reader.read())!= -1){
                if(input!=32) // 32 is the ascii value of space
                   count++;
              }
            }