Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我需要能够比较文件的条目-Java_Java_File_Compare - Fatal编程技术网

我需要能够比较文件的条目-Java

我需要能够比较文件的条目-Java,java,file,compare,Java,File,Compare,`导入java.io.BufferedReader; 导入java.io.FileReader; 导入java.io.IOException 公共类多基米{ private static String line; public static void main (String[] args) throws IOException { int x = 0; BufferedReader br = new BufferedReader(new FileReader("sr

`导入java.io.BufferedReader; 导入java.io.FileReader; 导入java.io.IOException

公共类多基米{

private static String line;


public static void  main (String[] args) throws IOException


{

    int x = 0;
    BufferedReader br = new BufferedReader(new FileReader("src/film.txt"));
    line = br.readLine();

    String[] filmline = new String [1000];

    while (line != null) {
        line = br.readLine();
        filmline[x] = line;
        x++;

    }
    br.close();

    for (int i = 0; i<x; i++) // after many tries the last change I made is this. This is the testing class.
    {

        String [] arr = filmline[i].split(": ");


        if ( i == x-1) // I know it isn't the best, maybe not even good but I tried many things and had nothing to lose.

        {

            for ( String ss : arr) {

                   String test = ss;
                    if (test.equals("Dancing With The Dogs "))
                    {
                        System.out.println("gotcha!");

                    }

                }

        }
    }






}

(一行中的每个条目)每次用户尝试添加新条目时,我必须确保文件中没有胶片。我尝试了slpit方法(使用
“:”
并删除“胶片id”等)和StringTokenizer,但它只在一个上工作,由me行指定,而不是在循环中工作,这样它就可以读取整个文件。

不要使用StringTokenizer,它是遗留的,出于维护原因应该得到支持,但不能在新代码中实现

考虑到标记每次都不同,您可能希望在字符串上运行,并在此处或此处使用子字符串,也就是说,假设每行包含相同的标记

或者,在以下位置更改您的输入:

“1*夏威夷海盗,来自夏威夷的喜剧海盗喝朗姆酒和 去冒险寻找更多的朗姆酒。”

这样,所有令牌都是相同的,您将能够使用拆分方法。

根据

将您的行稍作更改,添加一个“::

您可以尝试这种方法并与您的方法进行比较:(使用existsfilm在添加之前验证它是否已经存在)

public void showAllFilms(){
ArrayList films=getFilms();
对于(字符串[]电影:电影){
System.out.println(“id”+胶片[0]+“\nTile”+胶片[1]);
}
}
public existsFilm(字符串filmName){
ArrayList films=getFilms();
对于(字符串[]电影:电影){
if(film[1]。等于(filmName)){
返回true;
}
}
返回false;
}
公共阵列列表getFilms(){
ArrayList filmList=新的ArrayList();
int lineRead=0;
试一试{
File File=新文件(“yourfile.txt”);
BufferedReader br=新的BufferedReader(新文件读取器(文件));
弦线;
而((line=br.readLine())!=null){
String[]data=line.split(“:”);
如果(data.length>0){
add(新字符串[]{data[1],data[3],data[5],data[7]});
}
lineRead++;
}
}捕获(例外情况除外){
System.out.println(“错误读取行”+lineRead);
例如printStackTrace();//使用它非常难看(常见的是记录它)
}
返回电影列表;
}

首先创建一个程序,读取文件中的每一行并打印出来,让您知道它是有效的。然后改进该程序以进行所需的比较。然后改进该程序以将信息保存到文件中。始终将编程任务分解为小步。您能改变处理XML文件或数据库的方法吗?我假设你在做老师让你做的课堂练习。@realpoint我这样做了,正如我所说的,只有当它进入循环时才会遇到问题,它有时会设法打断第一行,然后停止,或者根本不起作用……如果我指定要打断哪一行,它工作得很好,但问题是我需要在整个文件上都这样做。@lano是的,这是一项作业,这是我第一次用Java语言处理复杂的文件,我正试图通过互联网找到如何处理这些文件的方法,因为我对文件还没有太多的了解。如果你确实编写了这样的循环,但它有问题,那么请将其代码添加到你的问题中,并用 {}按钮,在复制之前,请确保使用IDE格式源选项对其进行了正确的格式设置。有了问题中的源代码,以及对问题和错误的解释,我们可能能够提供帮助。我像“1:夏威夷海盗:动作片,喜剧片:夏威夷海盗喝朗姆酒,冒险寻找更多朗姆酒。“当我在指定的行上使用它时,它工作得很好,但当我在循环中尝试它时,它不会work@Unknown:如果它在一行上工作,那么它在所有行上都工作,即使在循环中也是如此。什么是不工作的?每次在循环中使用split时,我都会遇到这样的问题:“线程中的异常”main“java.lang.NullPointerException”它位于行中split方法位于循环中,这意味着您正在对空值调用split。重新检查输入文件,很可能在文件的末尾有一个空行。我检查了该文件,但在任何地方都没有空行。在这段代码中,我得到了这样的信息:“类型不匹配:无法从字符串[]转换为ArrayList”,但将胶片更改为字符串[]会导致更多错误,这是哪一行?有些错误我找不到雪人对上面的代码做了一些修改。请在使用dokimi3run后重试复制和粘贴(我创建的一个类的唯一目的是用代码创建该类的对象,这样我就不必处理使方法是静态的)我得到了以下错误:错误读取第0行java.lang.ArrayIndexOutOfBoundsException:4在ergasia.Dokimi3.getFilms(Dokimi3.java:44)在ergasia.Dokimi3.existsFilm(Dokimi3.java:25)在ergasia.dokimi3run.main(dokimi3run.java:11)读取第0行java.lang.ArrayIndexOutOfBoundsException:4在ergasia.Dokimi3.getFilms(Dokimi3.java:44)在ergasia.dokimi3run.main(dokimi3run.java:12)我尝试过,但它说我没有足够的声誉
"film id :  1  film title :   Pirates Of Hawai  film category :   action ,      comedy   film description :  A pirate from Hawai drinks rum and goes on an adventure to find more rum." 
"film id :  1 : film title :   Pirates Of Hawai : film category :   action ,      comedy :  film description :  A pirate from Hawai drinks rum and goes on an adventure to find more rum." 
 public void showAllFilms(){
    ArrayList<String[]> films = getFilms();
    for(String[] film : films){
        System.out.println("id "+film[0]+"\ntitle "+film[1]);
    }
 }

 public existsFilm(String filmName){
     ArrayList<String[]> films = getFilms();
     for(String[] film : films){
         if(film[1].equals(filmName)){
           return true;
         }
     }
     return false;
 }

 public ArrayList<String[]> getFilms(){
    ArrayList<String[]> filmList = new ArrayList();
    int lineRead = 0;
    try{
        File file = new File("yourfile.txt");
        BufferedReader br = new BufferedReader(new FileReader(file)));
        String line;
        while ((line = br.readLine()) != null) {
           String[] data = line.split(":");
           if(data.length > 0){
               filmList.add(new String[]{data[1],data[3],data[5],data[7]});
           }
           lineRead++;
        }
    }catch(Exception ex){
        System.out.println("Error reading line "+lineRead);
        ex.printStackTrace(); //very ugly using this (common is logging it)
    }
    return filmList;
 }