账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    Java用ArrayList存文件不完整
    110
    0

    这个程序的功能有计算一个文件夹内.java文件的个数和字符个数。现在假设文件夹里面就只有一个文件。我把文件里面的内容一行一行地读出来存到ArrayList里面,可是当我在parse()里面执行完collectDoc(file),再输出list后发现,就只输出了文件的后半部分,文件的前半部分不知道去哪里了

    package counter;
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.File;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Set;
    import java.util.TreeSet;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    public class AnalysisFileNumber {
        private int numberOfJavaSourceFiles;
        private File directory;
        private int countChar;//所有文件的字符数
        private ArrayList<String> list;
        private Map<String,Integer> map;
        private String dirName;
        
    
        private  int countNote;
        private int charInNote;
    
        public AnalysisFileNumber(File directory,String dirname) throws Exception{
            this.directory = directory;
            this.dirName=dirname;
            list=new ArrayList<String>();
            map=new HashMap<String, Integer>();
            this.parse(directory, 1);
            //writeDoc();//将结果写入文件
        }
        
        private void parse(File dir, int n) throws Exception{
            File[] files = dir.listFiles();
            for (File file : files) {
                if (file.isDirectory()) {
                    parse(file, n + 1); // 递归
                }else {
                    if (file.getName().toLowerCase().endsWith(".java")) {
                        this.numberOfJavaSourceFiles++;
                         
                        //将文件存入list中,并计算字符数
                        collectDoc(file);                    
                    }
                }    
            }
        }
    
    public void collectDoc(File file) throws Exception{
            FileReader reader = new FileReader(file);
             BufferedReader br = new BufferedReader(reader);
             list.clear();//在收录文件前先清空list
                 String s = br.readLine();
                 while(s!=null) {
                   countChar = countChar+s.length()+1;//字符个数就是字符长度
                   list.add(s);//list存的是单个文件
                  // System.out.println(s);
                    s = br.readLine();
                 }
                 for(int i=0;i<list.size();i++) {
                 System.out.println(list.get(i));
             }
                 br.close();
        }
    2
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • £九霄★战魂彡 普通会员 1楼

      在Java中,ArrayList不支持文件的直接读取和写入,因此如果你试图使用ArrayList存储文件,可能会遇到一些问题。

      如果你想在Java中读取文件,你可能需要使用java.io.FileInputStreamjava.io.FileInputStream类。但是,这两个类不能直接与ArrayList交互,所以你需要创建一个FileInputStream的实例,然后使用这个实例将文件内容读取到ArrayList中。

      以下是一个简单的示例:

      ```java import java.io.FileInputStream; import java.io.IOException;

      public class Main { public static void main(String[] args) { ArrayList list = new ArrayList(); try { FileInputStream fis = new FileInputStream("file.txt"); String line; while ((line = fis.readLine()) != null) { list.add(line); } fis.close(); } catch (IOException e) { e.printStackTrace(); } // 打印ArrayList for (String item : list) { System.out.println(item); } } } ```

      在这个示例中,我们首先创建了一个FileInputStream的实例,然后使用readLine方法从文件中读取每一行。然后,我们将每一行添加到ArrayList中。最后,我们打印出ArrayList中的所有元素。

      如果你尝试将文件内容写入到ArrayList中,你需要先将ArrayList的内容写入到磁盘,然后再将磁盘内容写入到ArrayList中。但是,这需要使用FileOutputStreamFileWriter类,而不是java.io.FileInputStreamjava.io.FileInputStream类。

      以下是一个简单的示例:

      ```java import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException;

      public class Main { public static void main(String[] args) { ArrayList list = new ArrayList(); try { FileOutputStream fis = new FileOutputStream("file.txt"); FileWriter writer = new FileWriter("file.txt"); writer.write("Hello, World!"); writer.close(); fis.close(); } catch (IOException e) { e.printStackTrace(); } // 打印ArrayList for (String item : list) { System.out.println(item); } } } ```

      在这个示例中,我们首先创建了一个FileOutputStream的实例,然后创建了一个FileWriter的实例。然后,我们使用write方法将字符串写入到文件中。最后,我们关闭FileOutputStreamFileWriter

      注意,FileOutputStreamFileWriter的写入模式是"w",而不是"a"。这是因为我们希望将内容写入到文件的最后,而不是覆盖原有的内容。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部