尝试…在释放资源时最终陷入其中? - c#

我想将String写入Unicode文件。我在Java中的代码是:

public static boolean saveStringToFile(String fileName, String text) {
    BufferedWriter out = null;
    boolean result = true;
    try {
        File f = new File(fileName);
        out = new BufferedWriter(new OutputStreamWriter(
                new FileOutputStream(f), "UTF-8"));
        out.write(text);
        out.flush();
    } catch (Exception ex) {
        result = false;
    } finally {
        if (out != null)
            try {
                out.close();
            } catch (IOException e) {
                // nothing to do! couldn't close
            }
    }

    return result;
}

更新资料

现在将其与C#进行比较:

    private static bool SaveStringToFile(string fileName, string text)
    {
        using (StreamWriter writer = new StreamWriter(fileName))
        {
            writer.Write(text);
        }
    }

甚至try..catch形式为:

    private static bool SaveStringToFile(string fileName, string text)
    {
        StreamWriter writer = new StreamWriter(fileName);
        try
        {
            writer.Write(text);
        }catch (Exception ex)
        {
            return false;
        }
        finally
        {
            if (writer != null)
                writer.Dispose();
        }
    }

也许是因为我来自C#和.Net世界。但这是将String写入文件的正确方法吗?对于如此简单的任务,这只是太多的代码。在C#中,我只想说out.close();就是这样,但是在try..catch语句中添加finally似乎有点奇怪。无论发生什么情况,我都添加了finally语句来关闭文件(资源)。为了避免使用过多的资源。这是Java中正确的方法吗?如果是这样,为什么close引发异常?

参考方案

您是对的,因为您需要在finally块中调用close(),并且还需要将其包装为try / catch

通常,您将在项目中编写一个实用程序方法,或从http://commons.apache.org/io/apidocs/org/apache/commons/io/IOUtils.html#closeQuietly(java.io.Closeable)之类的库中使用实用程序方法来关闭.ie.e。忽略close()中的任何throw异常。

另外需要注意的是,Java 7增加了对资源尝试的支持,从而无需手动关闭资源-http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html

是否有任何基于Java语法和功能的底层编程语言? - java

有没有基于Java语法和功能的低级编程语言?基本上,应该没有内存管理,用户应该能够直接访问内存。但应保持以下java功能:1)平台独立性(应根据机器架构直接编译为本机代码,以保持平台独立性,而不是编译为字节码)2)应该没有JVM来管理内存和资源。3)应具有异常抛出和捕获机制。4)应该具有内置的多线程和并发支持。5)利用Java-API。6)应该有像C一样的指…

Java:函数式编程中线程之间的状态共享 - java

我的问题是该问题的更具体实例:Functional programming: state vs. reassignment我是FP的新手,正尝试通过Java理解它。我有以下类,其对象在多个线程之间共享:public class Bank { private double[] accounts = new double[1000]; public synchr…

使用Python构建编译器或解释器 - java

Improve this question 现在,我正在写我的博士学位提案,为Java的新规范语言(参见JML或C#的SpeC#)构建语言处理器,并且需要确定一种实现工具以开始开发。语言的研究方面(语法,语义,理论结果)与我选择的实现正交,因此出于自身原因,我想使用Python(2.6+)。最终产品将是能够验证用Java编写的程序的某些指定属性的编译器或解释…

Java:正则表达式模式匹配器是否有大小限制? - java

我的模式类似于OR:“word1 | word2 | word3”我大约有800个字。可能有问题吗? 参考方案 您仅受记忆和理智的限制。 :)

Java:线程池如何将线程映射到可运行对象 - java

试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …