有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JAVAutil。扫描仪使用java中的扫描仪一次性完成文件读取

我必须阅读Java中的文本文件,为此我使用以下代码:

Scanner scanner = new Scanner(new InputStreamReader(
    ClassLoader.getSystemResourceAsStream("mock_test_data/MyFile.txt")));

scanner.useDelimiter("\\Z");
String content = scanner.next();
scanner.close();

据我所知StringMAX_LENGTH 2^31-1

But this code is reading only first 1024 characters from input file(MyFile.txt).

我找不到原因


共 (3) 个答案

  1. # 1 楼答案

    使用BufferedReader的示例非常适合大文件:

    public String getFileStream(final String inputFile) {
            String result = "";
            Scanner s = null;
    
            try {
                s = new Scanner(new BufferedReader(new FileReader(inputFile)));
                while (s.hasNext()) {
                    result = result + s.nextLine();
                }
            } catch (final IOException ex) {
                ex.printStackTrace();
            } finally {
                if (s != null) {
                    s.close();
                }
            }
            return result;
    }
    

    FileInputStream用于较小的文件

    使用readAllBytes并对它们进行编码也解决了这个问题

    static String readFile(String path, Charset encoding) 
      throws IOException 
    {
      byte[] encoded = Files.readAllBytes(Paths.get(path));
      return new String(encoded, encoding);
    }
    

    你可以看看this问题。非常好

  2. # 2 楼答案

    我已经阅读了一些评论,因此我认为有必要指出,这个答案并不关心好的或坏的做法。对于需要快速解决方案的懒人来说,这是一个愚蠢的、很好理解的扫描技巧

    final String res = "mock_test_data/MyFile.txt"; 
    
    String content = new Scanner(ClassLoader.getSystemResourceAsStream(res))
         .useDelimiter("\\A").next();
    

    here...偷来的

  3. # 3 楼答案

    感谢您的回答:

    我终于找到了解决办法

     String path = new File("src/mock_test_data/MyFile.txt").getAbsolutePath();
     File file = new File(path);
     FileInputStream fis = new FileInputStream(file);
     byte[] data = new byte[(int) file.length()];
     fis.read(data);
     fis.close();
     content = new String(data, "UTF-8");
    

    因为我必须一次读一个很长的文件