FileNotFoundException 有时会被抛出,我不知道为啥
Posted
技术标签:
【中文标题】FileNotFoundException 有时会被抛出,我不知道为啥【英文标题】:FileNotFoundException is being thrown sometimes and i don't know whyFileNotFoundException 有时会被抛出,我不知道为什么 【发布时间】:2015-11-09 23:02:01 【问题描述】:我正在尝试运行一个返回 XML 格式的 Web 服务,但它有时会在 3G 网络上抛出 FileNotFoundException,有时在 WIFI 网络上会成功运行
这是连接的代码:
@Override
protected ArrayList<NewsItemVO> doInBackground(Void... args)
try
URLConnection conn = new URL(feedUrl).openConnection();
conn.setConnectTimeout(20000);
conn.setReadTimeout(20000);
InputStream in = new BufferedInputStream(conn.getInputStream());
这是抛出异常的那一行
InputStream in = new BufferedInputStream(conn.getInputStream());
【问题讨论】:
【参考方案1】:在使用输入流之前,您可以检查它是否可用?
http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html
【讨论】:
输入流尚未使用,它只是初始化,所以我认为问题出在“conn.getInputStream()” 我不知道这是否有区别,但您可以尝试 java.net.URL 的 openStream 方法。【参考方案2】:根据文档:
表示尝试打开由指定路径名表示的文件失败的信号。
当具有指定路径名的文件不存在时,FileInputStream、FileOutputStream 和 RandomAccessFile 构造函数将抛出此异常。如果文件确实存在但由于某种原因不可访问,例如当试图打开一个只读文件进行写入时,这些构造函数也会抛出它。
由于您的代码在大多数情况下都在工作,而在某些时候不工作,我怀疑您正在获得 ConnectionTimeOut。
要进一步挖掘问题,请按照以下步骤操作。
1) 声明一个长变量 t1 并在 try 块之前将其初始化为 System.currentTimeMillis()。再声明一个长变量 t2 并在 finally 块后获取当前时间。检查差异。如果差异大于连接超时设置,我们可以断定您正在获得连接超时。
2) 在 catch 子句中打印完整的异常堆栈跟踪。
3) 当您遇到此异常时,请检查文件的权限并确认该文件可通过读取/执行权限访问。
还有一件事 - 由于它在 wifi 下工作正常而在 3G 下工作不正常,我怀疑连接超时是根本原因。
【讨论】:
以上是关于FileNotFoundException 有时会被抛出,我不知道为啥的主要内容,如果未能解决你的问题,请参考以下文章
Liquibase - ZipFile.java 中的 FileNotFoundException
java.io.FileNotFoundException: ...my_flutter/.android/include_flutter.groovy
向 Solr 核心添加字段时,为啥会出现“ManagedIndexSchema Error persisting managed schema => FileNotFoundException:
ApplicationSettingsBase 中的 FileNotFoundException