Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.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 Can';t将所有列表写入文件_Java - Fatal编程技术网

Java Can';t将所有列表写入文件

Java Can';t将所有列表写入文件,java,Java,我有一个文本文件中一些行的ArrayList列表。我试图在一个文本文件中找到这些行,如果我找到它,我想将其写入另一个文本文件,并将其从原始文件中删除 我为此写了一个代码,它是有效的,但不是整个列表,有时需要一行,有时需要更多。给我这个信息: 1 R101 100850 0 捕获异常:java.io.IOException:流已关闭 有人能帮我吗 String subLine = line.substring(5, line.length() - 2); 您正在硬编码以从索引5中获取子字符串 当

我有一个文本文件中一些行的ArrayList列表。我试图在一个文本文件中找到这些行,如果我找到它,我想将其写入另一个文本文件,并将其从原始文件中删除

我为此写了一个代码,它是有效的,但不是整个列表,有时需要一行,有时需要更多。给我这个信息:

1 R101 100850 0 捕获异常:java.io.IOException:流已关闭

有人能帮我吗

String subLine = line.substring(5, line.length() - 2);
您正在硬编码以从索引5中获取子字符串

当线的长度小于5时会发生什么情况?检查线路长度是否小于5,然后继续


还有,为什么要用“异常”捕捉?尝试使用较低级别的异常(如ArrayIndexOutOfBoundsException等)进行捕获。

谢谢大家的帮助

我发现了这个问题,因为我删除了这个文件,并从临时文件中再次创建了它。在这种情况下,我丢失了指向该文件的指针

这是我修复后的代码,如果有人感兴趣

 static void moveLines(ArrayList posList, int topic) {

    //=======================To read lines=======
    File inputFile = new File("U:\\Research\\Projects\\sef\\enhancfeaturtm\\Data1\\topic\\" + "Test" + topic + ".txt");
    File outputFile = new File("U:\\Research\\Projects\\sef\\enhancfeaturtm\\Data1\\topic\\" + "Training" + topic + ".txt");

    try {
        FileReader fileReader = new FileReader(inputFile);
        BufferedReader bufferedReader = new BufferedReader(fileReader);

        FileWriter fileWriter = new FileWriter(outputFile);
        BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);

        String line;
        while ((line = bufferedReader.readLine()) != null) {
            String subLine = line.substring(5, line.length() - 2);

            if (posList.contains(subLine)) {
                System.out.println(count++ + " " + line);
                bufferedReader.close();
                fileReader.close();


                bufferedWriter.write(line+"\n");
                bufferedWriter.flush();


                bufferedReader = removeLineFromFile(inputFile.getAbsolutePath(), line);

            }
        }
        bufferedWriter.close();
        fileWriter.close();

        bufferedReader.close();
        fileReader.close();
    } catch (Exception e) {
        System.out.println("Exception caught : " + e);
    }
}

static BufferedReader removeLineFromFile(String file, String lineToRemove) {

    BufferedReader bufferedReader = null;

    try {

        File inFile = new File(file);

        //Construct the new file that will later be renamed to the original filename. 
        File tempFile = new File(inFile.getAbsolutePath() + ".tmp");

        BufferedReader br = new BufferedReader(new FileReader(file));
        BufferedWriter bw = new BufferedWriter(new FileWriter(tempFile));

        String line = null;

        //Read from the original file and write to the new 
        //unless content matches data to be removed.
        while ((line = br.readLine()) != null) {

            if (!line.trim().equals(lineToRemove)) {

                bw.write(line+"\n");
                bw.flush();
            }
        }
        bw.close();
        br.close();

        //Delete the original file
        if (!inFile.delete()) {
            System.out.println("Could not delete file");
            return null;
        }

        //Rename the new file to the filename the original file had.
        if (!tempFile.renameTo(inFile)) {
            System.out.println("Could not rename file");
        }

        FileReader fileReader = new FileReader(inFile);
        bufferedReader = new BufferedReader(fileReader);

    } catch (FileNotFoundException ex) {
        ex.printStackTrace();
    } catch (IOException ex) {
        ex.printStackTrace();
    }

    return bufferedReader;
}

该异常发生在哪一行?你能把你的墙o’代码缩减到更易于管理的地方,仍然会重现问题吗?它发生在第一个例外中。
 static void moveLines(ArrayList posList, int topic) {

    //=======================To read lines=======
    File inputFile = new File("U:\\Research\\Projects\\sef\\enhancfeaturtm\\Data1\\topic\\" + "Test" + topic + ".txt");
    File outputFile = new File("U:\\Research\\Projects\\sef\\enhancfeaturtm\\Data1\\topic\\" + "Training" + topic + ".txt");

    try {
        FileReader fileReader = new FileReader(inputFile);
        BufferedReader bufferedReader = new BufferedReader(fileReader);

        FileWriter fileWriter = new FileWriter(outputFile);
        BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);

        String line;
        while ((line = bufferedReader.readLine()) != null) {
            String subLine = line.substring(5, line.length() - 2);

            if (posList.contains(subLine)) {
                System.out.println(count++ + " " + line);
                bufferedReader.close();
                fileReader.close();


                bufferedWriter.write(line+"\n");
                bufferedWriter.flush();


                bufferedReader = removeLineFromFile(inputFile.getAbsolutePath(), line);

            }
        }
        bufferedWriter.close();
        fileWriter.close();

        bufferedReader.close();
        fileReader.close();
    } catch (Exception e) {
        System.out.println("Exception caught : " + e);
    }
}

static BufferedReader removeLineFromFile(String file, String lineToRemove) {

    BufferedReader bufferedReader = null;

    try {

        File inFile = new File(file);

        //Construct the new file that will later be renamed to the original filename. 
        File tempFile = new File(inFile.getAbsolutePath() + ".tmp");

        BufferedReader br = new BufferedReader(new FileReader(file));
        BufferedWriter bw = new BufferedWriter(new FileWriter(tempFile));

        String line = null;

        //Read from the original file and write to the new 
        //unless content matches data to be removed.
        while ((line = br.readLine()) != null) {

            if (!line.trim().equals(lineToRemove)) {

                bw.write(line+"\n");
                bw.flush();
            }
        }
        bw.close();
        br.close();

        //Delete the original file
        if (!inFile.delete()) {
            System.out.println("Could not delete file");
            return null;
        }

        //Rename the new file to the filename the original file had.
        if (!tempFile.renameTo(inFile)) {
            System.out.println("Could not rename file");
        }

        FileReader fileReader = new FileReader(inFile);
        bufferedReader = new BufferedReader(fileReader);

    } catch (FileNotFoundException ex) {
        ex.printStackTrace();
    } catch (IOException ex) {
        ex.printStackTrace();
    }

    return bufferedReader;
}