Bufferedreader无法读取整个文件

时间:2015-07-13 10:56:47

标签: java xml file bufferedreader

所以我得到了这个奇怪的错误。 我想要做的是:

  1. 打开一个zip文件,然后解压缩内容。
  2. 遍历文件的内容并修复文件的空格以及引用文件的位置,这些文件位于多个XML中。
  3. 邮编内容。
  4. 第1点和第1点3我已经被覆盖 - 但是当我尝试读取所有xml文件时,出了点问题。 我有想要在arraylist中读取的所有xml文件(大约30个文件),然后我想要像这样读取它们(注意:这个方法在for循环中调用,迭代30个xml文件):< / p>

    private static void readXMLFile(String path) {
        // System.out.println("Deleting");
        Iterator<String> iter = listToRecreate.iterator();
        while (iter.hasNext()) {
            String str = iter.next();
            if (listToRecreate.size() > 0) {
                iter.remove();
            }
        }
    
        File mFile = new File(path);
        // System.out.println(path);
        // System.out.println("Beginning to read");
    
        BufferedReader br = null;
        try {
            br = new BufferedReader(new FileReader(mFile.getPath()));
            for (String sCurr = ""; (sCurr = br.readLine()) != null;) {
                // System.out.println(sCurr);
                listToRecreate.add(sCurr);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        editFile(path);
    }
    

    然后发生的是只读取文件的一半内容。但奇怪的是,如果我把一个xml文件拿出并尝试读取它,那么一切正常。这可能是什么错误? 在此先感谢:)

    编辑: 我如何写文件

    private static void editFile(String path) {
        // System.out.println(path);
        try {
            PrintWriter writer = new PrintWriter(new File(path));
            for (String str : listToRecreate) {
                // System.out.println(str);
                int j = 0;
                for (String tag : listOfTagNames) {
                    str = replaceTag(str, listOfTagNames.get(j));
                    j++;
                }
                // System.out.println(str);
                writer.println(str);
            }
            writer.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    

    编辑2: 我刚刚意识到可能是我的解压方法让我感到困惑。 更新:此代码现在可用。感谢http://www.avajava.com/tutorials/lessons/how-do-i-unzip-the-contents-of-a-zip-file.html

    public static void unzipFile(String filePath, String destPath) {
        try {
            ZipFile zipFile = new ZipFile(filePath);
            Enumeration<?> enu = zipFile.entries();
            while (enu.hasMoreElements()) {
                ZipEntry zipEntry = (ZipEntry) enu.nextElement();
    
                String name = zipEntry.getName();
                long size = zipEntry.getSize();
                long compressedSize = zipEntry.getCompressedSize();
                //System.out.printf("name: %-20s | size: %6d | compressed size: %6d\n",
                       // name, size, compressedSize);
    
                File file = new File(destPath + File.separator + name);
                if (name.endsWith("/")) {
                    file.mkdirs();
                    continue;
                }
    
                File parent = file.getParentFile();
                if (parent != null) {
                    parent.mkdirs();
                }
    
                InputStream is = zipFile.getInputStream(zipEntry);
                FileOutputStream fos = new FileOutputStream(file);
                byte[] bytes = new byte[1024];
                int length;
                while ((length = is.read(bytes)) >= 0) {
                    fos.write(bytes, 0, length);
                }
                is.close();
                fos.close();
    
            }
            zipFile.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    

1 个答案:

答案 0 :(得分:1)

对于那些可能在未来遇到同样问题的人。 我发现这是我的解压缩方法没有完全解压缩我的文件,并且检查了我的读/写方法。 我已经更新了代码,因此解压缩方法可以正常工作。

感谢所有人试图帮助我!