我在編寫代碼以從FTP URL中讀取文件,以解析它並將數據存儲在Google App Engine的數據存儲中。在閱讀託管在我自己的Web服務器上的測試文件時,我能夠使代碼正常工作,但是當我嘗試讀取數據文件時,我需要獲取FileNotFoundException。從Google App Engine中的FTP URL中讀取文件FileNotFoundException
我可以在瀏覽器中使用相同的FTP URL來下載文件,並可以匿名連接到FileZilla中的FTP URL,因此訪問不應該是一個問題,並且文件肯定存在。這是一個非常大的文件,但我試圖從相同的FTP服務器抓取較小的文件,但沒有運氣。
這是我目前所面對的代碼:
public void doGet(HttpServletRequest req,
HttpServletResponse resp) throws IOException, ServletException {
// works with a URL to my own server & a test.zip, but not this one
final URL url = new URL(
"ftp://gisftp.metc.state.mn.us/google_transit.zip");
// without the privileged action, I get an AccessControlException
ZipInputStream zin = AccessController.doPrivileged(
new PrivilegedAction<ZipInputStream>() {
public ZipInputStream run() {
return getZipStream(url);
}
}
);
ZipEntry zipentry = zin.getNextEntry();
// processing files here
zin.close();
}
// but using the privileged method, we get a FileNotFoundException
public ZipInputStream getZipStream(URL url) {
ZipInputStream zipin = null;
try {
zipin = new ZipInputStream(url.openStream());
} catch (IOException e) {
e.printStackTrace();
}
return zipin;
}
起初,我得到一個AccessControlException,但使用一個PrivilegedAction打開流似乎解決這個問題。
我沒有訪問存儲文件的服務器,所以不能在那裏更改任何內容。
這很有道理..感謝您指出這一點,不知道我在閱讀該頁面時是如何錯過的。 – Trent