1

我正在尝试创建一个文件,该文件映射某些语音标签的每个可能的二进制组合,并且由于某种原因,我编写的 java 程序在 8192 字节后停止。我假设这是最大缓冲区大小还是什么?我该如何改变呢?

我的代码:

    try {
        Scanner in = new Scanner(new FileInputStream(file.getPath()));
        PrintWriter out = new PrintWriter(new FileOutputStream("S2.gr"));
        createS2(in, out);
    } catch (Exception e) {
        System.out.println("There was an error trying to open the files: " + e.getMessage());
    }


private static void createS2(Scanner in, PrintWriter out) {
    String[] pos = in.useDelimiter("\\A").next().split("\\n");
    out.println("1\tS2");
    for (String x : pos) {
        out.println("1\tS2\t_" + x);    
    }
    for (String x : pos) {
        String temp = ("1\t_" + x + "\t" + x);
        out.println(temp);
        for (String y : pos) {
            out.println(temp + " _" + y);
        }
    }
    for (String x : pos) {
        System.out.println(x);
    }
}
4

1 回答 1

1

尝试这个...

    Scanner in = null;
    PrintWriter out = null;
    try {
        in = new Scanner(new FileInputStream(file.getPath()));
        out = new PrintWriter(new FileOutputStream("S2.gr"));
        createS2(in, out);
    } catch (Exception e) {
        System.out.println("There was an error trying to open the files: " + e.getMessage());
    }
    finally {
        if(in != null) in.close();
        if(out != null) out.close();
    }

注意:如果您使用的是 Java 7,则有一个新功能可以使这更容易。例如

     try (Scanner in = new Scanner(new FileInputStream(file.getPath()));
          PrintWriter out = new PrintWriter(new FileOutputStream("S2.gr")))
     {
        createS2(in, out);
     } catch (Exception e) {
        System.out.println("There was an error trying to open the files: " + e.getMessage());
     }

注意:我目前没有可用的 JDK 7,因此第二个示例可能不是 100% 正确,但想法是新的语言功能可以为您管理关闭资源。

于 2012-04-24T03:28:37.653 回答