Java中的文件
类包含一些方法,这些方法利用布尔值来指示正在执行的操作的成功性。上述方法的用户需要在每次调用时检查返回值。
以下是取自mkdir()
的文档片段,说明了要求:
公共布尔值mkdir()
创建由该文件命名的目录,假设其父目录存在。如果还想创建缺失的父对象,请使用mkdirs。
请注意,此方法不会在失败时引发IOException。呼叫者必须检查返回值。
createNewFile()
也有一个例子,它(甚至更奇怪)使用布尔值和抛出的异常来表示成功:
公共布尔createNewFile()引发IOException
根据文件中存储的路径信息在文件系统上创建一个新的空文件。如果该方法创建了一个文件,则返回true;如果该文件已经存在,则返回false。请注意,即使文件不是文件,它也会返回false(例如,因为它是一个目录)。
...
请注意,如果文件已经存在,即使不是常规文件,此方法也不会引发IOException。调用者应该总是检查返回值,并且可能还想调用isFile。
现在,这看起来充其量是不方便的,因为用户必须预测两种错误场景,而不仅仅是使用一个简单的try-catch
块。
这件事背后的原因是什么?
因为这是他们二十多年前设计它的方式。如果你能让开发商离开他们的养老院,离开他们的齐默框架,你可能会得到一个更好的答案。否则我们都只是猜测。
然而,你不需要像一些人认为的那样频繁地调用这些方法。例如,isFile()/exists()/delete()/createNewFile()
在newfileinputstream(…)之前都是多余的
或
新文件输出流(…)
,它将抛出您正在查找的异常。调用
文件。exists()/delete()/createNewFile()
在这些构造函数或相应的FileReader/Writer
构造函数之前,这是一种严重的时间和空间浪费,构造函数(或者由构造函数调用的操作系统代码)必须重复的工作。我怀疑我是否使用过文件。createNewFile()
将在20年内完成。
我正在尝试使用HttpWebRequest验证Url的存在。我发现了一些基本上这样做的示例: 但是,如果url确实损坏了,它不会返回响应,而是抛出异常。 我将代码修改为: 这似乎终于做到了我想要的。 但是我想知道,为什么请求会抛出异常,而不是返回带有NotFindstatus代码的响应?
所以我必须做以下其中之一: 在每个doSomething调用周围添加try catch块 在main中添加throws语句 删除doSomething中的throws语句 将该条件作为前提条件,这样不遵循该条件就会导致未定义的行为或类似的行为。 3将不起作用,因为doSomething可能会在客户端使用时引发异常。1和2简直是多余的,我认为应该避免。 我的问题是:在提到的选项(或任何其他选项)中,
问题内容: 考虑以下代码: 无需添加方法签名即可编译该代码。(它与同样表现到位,太)。 我理解为什么 可以 安全地运行它,因为实际上不能将其引发在块中,因此不能引发已检查的异常。我有兴趣知道在何处指定此行为。 并非永远都不会达到目标:以下代码也会编译: 但是,如果抛出一个检查的异常,它不会像我期望的那样编译: 在JLS Sec 11.2.2中 ,它说: 一,其抛出的表达式语句(§14.18)具有静
下面是我的代码。当我运行它时,我在线程“main”java.lang.IndexOutOfBoundsException:Index:3、Size:2中得到异常,而不是我的异常消息。谁能解释一下我做错了什么,为什么会这样?谢谢!
null 为简洁起见,排除了getter和setter(用于所有字段)以及toString()。 我尽了最大的努力按照指导原则格式化代码,但它没有发生,请耐心等待。 @Entity@Table(name=“Products”)@XmlRootElement@NamedQueries({@NamedQuery(name=“Product.FindAll”,query=“从产品p中选择p”),@nam
最近配置了eslintrc,有一个文件中有'no-dupe-class-members': 'error'的错误,如果单独扫描该文件eslint [file path]时可以扫出来,但用eslint src/的方式扫描包含该文件的父级目录,结果中就不存在此错误了,这是什么原因?