- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我一直在为此焦头烂额,因此我正在寻求帮助。
我有一个执行以下操作的代码循环
//imports ommitted
public void afterPropertiesSet() throws Exception{
//building of URL list ommitted
// urlMap is a HashMap <String,String> created and populated just prior
for ( Object urlVar : urlMap.keySet() ){
String myURLvar = urlMap.get(urlVar.toString);
System.out.println ("URL is "+myURLvar );
BufferedImage imageVar = ImageIO.read(myURLvar);//URL confirmed to be valid even for executions that fail
String fileName2Save = "filepath"// a valid file path
System.out.println ("Target path is "+fileName2Save );
File file2Save = new File (fileName2Save);
fileName2Save.SetWriteable(true);//set these just to be sure
fileName2Save.SetReadable(true);
try{
ImageIO.write (imageVar,"png",file2save)//error thrown here
}catch (Exception e){
System.out.println("R: "+file2Save.canRead()+" W: "+file2Save.canWrite()+" E:"+file2Save.canExecute()+" Exists: "+file2Save.exists+" is a file"+file2Save.isFile() );
System.out.println("parent Directory perms");// same as above except on parent directory of destination
}//end try
}//end for
}
这一切都在 Windows 7 和 JDK 1.6.26 以及 Netbeans、Tomcat 7.0.14 上运行。目标目录实际上在我的 netbeans 项目目录中,位于普通 Web 应用程序的文件夹中(在 WEB-INF 之外),我通常希望在该文件夹中具有写入文件的权限。
当错误发生时,我得到文件 a.) 全部错误 b.) 全部正确的两个结果之一。除了 isFile 之外,父目录权限永远不会更改。
抛出的错误(java.IO.error with "access denied"")并不是每次都会发生...事实上,循环运行时 60% 的时间它不会抛出任何错误。剩下的 40% 的时间我在它写入的 60 多个文件中的 1 个上出现错误。很少有相同的文件。它从 URL 开始的顺序每次都会更改,因此写入文件的顺序是可变的。文件名具有简短的简洁名称,如“1.png"。图像很小..不到 8k。
为了确保权限正确,我有:
从 net beans 项目目录向下给予每个人“完全控制”
以管理员身份运行 JDK、JRE 和 Netbeans
禁用 UAC
但错误仍然存在。谷歌搜索这个似乎包罗万象,而且经常读起来像伏都教。显然,我(以及 Java 和 Netbeans 等)应该有权将文件写入目录。
有人有什么见解吗?这是封闭系统上的所有内容(代码和托管 URL 的 Web 服务器),因此我无法剪切和粘贴代码或堆栈跟踪。
更新:我通过在每次读取之前执行 println & toString 来确认 imageURL 是有效的。然后我确认 a.) 托管目标 URL 的网络服务器返回带有 http 200 代码的图像 b.) 在网络浏览器中测试时 URL 返回图像。在测试中,我还在读取后放入一个 if () 以确认值不是 NULL 或空的。我还对所有其他值进行了 NULL 测试。即使失败,它们也总是符合预期。错误总是发生在 try block 内。每次执行的目标目录都是相同的。在每次执行之前,目录都是空的。
更新 2:这是堆栈跟踪之一(在这种情况下,file2Save 的权限是 R: True W:True E: True isFile:True exists:True )
java.io.FileNotFoundException <fullFilepathhere> (Access is denied)
at java.io.RandomAccessFile.open(Native Method)
at java.io.RandomAccessFile.<init>(RandomAccessFile.java:212)
at javax.imageio.stream.FileImageOutputStream.<init>(FileImageOutputStream.java:53)
at com.sun.imageio.spi.FileImageOutputStreamSpi.createOutputStreamInstance(FileImageOutputStreamSpi.java:37)
at javax.imageio.ImageIO.createImageOutputStream(ImageIO.java:393)
at javax.imageio.ImageIO.write(ImageIO.java:1514)
at myPackage.myClass.afterPropertiesSet(thisClassexample.java:204)// 204 is the line number of the ImageIO write
最佳答案
这可能无法解决您的问题,因为您的有限信息可能还有许多其他可能性。
如果同时满足以下四个条件,则无法在 Web 应用程序中写入文件的一个常见可能性是 Windows 上的文件锁定问题:
WEB-INF
文件夹和如果您尝试替换满足所有四个条件的文件,您将无法替换,因为某些 servlet 容器(例如 tomcat 和 jetty)会缓冲静态内容并锁定文件,因此您无法替换或更改它们。
如果您的 Web 应用程序确实存在此问题,则不应使用默认的 servlet 来提供文件内容。默认的 servlet 设计用于提供您不想更改的静态内容,例如css文件、javascript文件、背景图片等
有一个技巧可以通过禁用 NIO 来解决 Windows for jetty 上的文件锁定问题 http://docs.codehaus.org/display/JETTY/Files+locked+on+Windows
这个技巧对开发过程很有用,例如您想编辑 css 文件并在不重新启动 Web 应用程序的情况下查看更改,但不建议在生产模式下使用。如果您的 Web 应用程序在生产过程中依赖于此技巧,那么您应该认真考虑重新设计您的代码。
关于Java 文件 IO 和 "access denied"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6867832/
我正在尝试编写 Access Access 数据库的脚本,以便在命令行上使用。 Access 数据库使用工作组文件进行保护。 Dim oApp, sWGF,myWS Set sApp = Create
我有一个包含数据表的表格。我希望用户能够选择多行,单击按钮并运行一些 sql 查询并对这些行执行一些工作。 查看我的 VBA 代码,我发现如何使用 CurrentRecord 属性 Access 最后
如果我在某个网络位置有 Microsoft Access 2007 数据库,那么可以使用该数据库的客户端计算机的数量是否有限制?客户端不会安装 Access,而是使用 Access Runtime 2
我正在开发一个注册系统。但我收到此错误:You tried to execute a query that does not include the specified expression.. 我正
我有一个产品设计为使用 MS Access 文件作为数据库的桌面产品。 现在,一些用户需要将它安装在几台 PC(比如说 2 或 3 台)上并共享数据库。 我想将 MS Access 文件放在共享文件夹
我接手了一个旧的软件项目,该项目使用 MS Access 数据库来存储数据。但是数据库不会在 Access 中打开,如下所示: "You do not have the necessary permi
我有一个文件夹,里面装满了 100 多个 Access97 文件。我需要将它们全部更新到 Access2003。 我可以手动完成,但使用 VBA 可能会快很多。 有没有人会有一个片段可以做到这一点?或
我正在通过 SQL Server 迁移助手 (SSMA) 将数据从 Access 数据库迁移到 SQL Server。 Access 应用程序将继续与转换为链接表的本地表一起使用。 一个连续的表单在加
我正在通过 SQL Server 迁移助手 (SSMA) 将数据从 Access 数据库迁移到 SQL Server。 Access 应用程序将继续与转换为链接表的本地表一起使用。 一个连续的表单在加
我的公司用 Visual Basic 6 开发了一个应用程序。 该应用程序通过 ODBC 数据源使用 Access 数据库。 Access 数据库是一个扩展名为“.mdb”的文件。 在以下环境中运行应
我一直在尝试让 Microsoft Access 从主 Access 窗口中“退出”,以便我可以隐藏 Access 窗口并仅在桌面上显示表单,以便可以轻松地将其放置在其他应用程序旁边。 起初我发现了一
我想在 access 2010 中使用 access 2000 和 2003 数据库。由于我不想检查一切是否手动工作,我正在寻找一种工具来分析 VBA 代码以查找使用 access 2010 发生的错
所以我有一个 Excel 工作簿,其中有一个很好的 shaperange 对象的全局 map 。通过一些非常简单的代码,我可以更改颜色、将国家/地区集合分组和取消分组为数组等......并且效果非常好
我们希望有大约 35-40 人通过共享驱动器上的脚本写入 Access 数据库。这些指标分解为他们需要每小时写大约 3-7 次。 Access 会支持这一点而不会对我产生影响吗? 是的,我很乐意将其用
我正在寻找一种使用 VBA 代码从外部数据库文件中删除 VBA 模块的方法。名为“myfile.accdb”的外部文件有一个名为“mod1”的模块,我希望能够在单独的项目中使用 VBA 代码删除该模块
我在 Access 2003 数据库(在 Access 2007 中开发)中有三个表单,它们处于父级 -> 子级 -> 孙子级关系中。在子窗体的 'Form_Load' 子窗体中,我设置了孙子窗体的一
MS Access 2007 存在拒绝在设计模式下显示表单的问题。我可以看到表单的代码(如果我查看显示表单的按钮的事件属性),但我看不到作为 GUI 布局的表单。而且,当我尝试从应用程序的主窗口调用此
我编写了代码,使用 Excel 中的下拉列表提供的标准将两个表连接起来,然后将数据返回到电子表格上的特定位置(工作表上已经有标题)。 这在我的机器上和其他机器上使用 MS Access 的机器上都可以
我正在开始构建一个应用程序,该应用程序从给定的根路径开始遍历文件夹结构,并将所有找到的 Access 1997 .mdb 文件转换为较新的 Access 2007/2010 .accdb 格式。但是,
我有一个表单和一个按钮。我想通过单击按钮打开另一个表单,并将参数从父表单传递到子表单(子表单的 RecordSource 有参数)。我该怎么做? 最佳答案 您可以通过引用表单的对象来引用调用表单的任何
我是一名优秀的程序员,十分优秀!