如何从java中的Text文件中跳过某些行?

时间:2012-04-04 09:02:49

标签: java io out-of-memory

我正在学习Java,我遇到了这个问题,我想加载一个包含大量行的文件(我逐行读取文件),我想要做的就是跳过某些行(伪代码)。

the line thats starts with (specific word such as "ABC")

我尝试过使用

if(line.startwith("abc"))

但那没用。我不确定我做错了,这就是为什么我在这里寻求帮助,在加载功能的一部分之下:

public String loadfile(.........){

//here goes the variables 

try {

        File data= new File(dataFile);
        if (data.exists()) {
            br = new BufferedReader(new FileReader(dataFile));
            while ((thisLine = br.readLine()) != null) {                        
                if (thisLine.length() > 0) {
                    tmpLine = thisLine.toString();
                    tmpLine2 = tmpLine.split(......);
                    [...]

4 个答案:

答案 0 :(得分:9)

尝试

if (line.toUpperCase().startsWith(­"ABC")){
    //skip line
} else {
    //do something
}

这将使用函数linetoUpperCase()转换为所有上部字符,并检查字符串是否以ABC开头。

如果它是true,则它将不执行任何操作(跳过该行)并进入else部分。

您还可以使用startsWithIgnoreCase这是Apache Commons提供的功能。它需要两个字符串参数。

public static boolean startsWithIgnoreCase(String str,
                                           String prefix)

此函数返回布尔值。 并检查String是否以指定的前缀开头。

如果String以前缀开头,不区分大小写,则返回true。

答案 1 :(得分:2)

如果案例不重要,请尝试使用Apache Commons

StringUtils.startsWithIgnoreCase(String str, String prefix)
This function return boolean.

See javadoc here

用法:

if (StringUtils.startsWithIgnoreCase(­line, "abc")){
    //skip line
} else {
    //do something
}

答案 2 :(得分:1)

如果输入文件较大,则代码将创建OutOfMemoryError。如果没有编辑代码,你就无法对付它(如果文件变大,添加更多内存将失败)。

我认为您将选定的行存储在内存中。如果文件变得更大(2GB左右),你将拥有4GB的内存。 (String和新值的旧值。

你必须使用流来解决这个问题。

创建一个FileOutpuStream,并将选定的行写入该流。

您的方法必须更改。对于大输入你不能返回一个字符串:

public String loadfile(...){

您可以返回Stream或文件。

public MyDeletingLineBufferedReader loadFile(...)

答案 3 :(得分:0)

您可以使用:

BufferedReader br = new BufferedReader(new FileReader("file.txt"));
    String lineString;
    try{
    while((lineString = br.readLine()) != null) {
        if (lineString.toUpperCase().startsWith(­"abc")){
            //skip
            } else {
            //do something
            }
        }
     }

org.apache.commons.lang.StringUtils 中的

static boolean startsWithIgnoreCase(String str, String prefix)方法如下。

BufferedReader br = new BufferedReader(new FileReader("file.txt"));
       String lineString;
        try{
            while((lineString = br.readLine()) != null) {
               if (StringUtils.startsWithIgnoreCase(­lineString, "abc")){
                //skip
                } else {
                //do something
                }
              }
           }