我正在尝试实现一个正在下载HTML文件的类,并将其本地保存在我的设备上。当HTML文件更改时,我想重新下载HTML文件并覆盖现有文件。在此之后,我想将此HTML文件传递给Jsoup以使用它。但是我的班级不起作用。下面的代码给了我一个“java.io.FileNotFoundException:/tabelle.html:open failed:ENOENT(没有这样的文件或目录)” 所以我的下载根本不起作用,或者我的代码中有一些误导性的路径。希望有人可以帮助我...
public class DownloadData extends AsyncTask<String, Void, Boolean> {
private ProgressBar pBar;
InputStream is;
BufferedInputStream bis;
ByteArrayBuffer baf;
FileOutputStream fos;
protected void onPreExecute() {
pBar = (ProgressBar)findViewById(R.id.progressBar2);
pBar.setVisibility(View.VISIBLE);
}
protected Boolean doInBackground(String... website) {
try {
URL url = new URL(website[0]);
URLConnection urlConnection = url.openConnection();
urlConnection.connect();
long dateHttp = urlConnection.getLastModified();
File file = new File("tabelle.html");
long dateLocal = file.lastModified();
if(dateLocal < dateHttp || file.exists() == false) {
is = urlConnection.getInputStream();
bis = new BufferedInputStream(is);
baf = new ByteArrayBuffer(1024);
int current = 0;
while((current = bis.read()) != -1) {
baf.append((byte) current);
}
fos = openFileOutput("tabelle.html", Context.MODE_PRIVATE);
fos.write(baf.toByteArray());
return true;
}
else {
return false;
}
}
catch (Exception e) {
return false;
}
finally {
try {
is.close();
bis.close();
baf.clear();
fos.close();
}
catch(Exception e) {
return false;
}
}
}
protected void onPostExecute(Boolean result) {
pBar.setVisibility(View.GONE);
try {
File file = new File("tabelle.html");
Document doc = Jsoup.parse(file, "CP1252", "");
}
catch(Exception e) {
((TextView)findViewById(R.id.textViewC4)).setText(e.toString());
}
}
}
答案 0 :(得分:0)
错误在这一行new File("tabelle.html");
中,它在Linux根分区中创建一个文件,这是一个系统专用区域。检查[THIS LINK] [1]以正确方式访问Android上磁盘中的文件。
请记住,如果您打算使用外部存储(对于您认为不应该使用的用例),则需要WRITE_EXTERNAL_STORAGE权限。
修改强>
我注意到您使用openFileOutput()
写入文件。这是与使用new File()
如@hgoebl所述,要将文件放在与openFileOutput()
相同的位置,您应该使用new File(getCacheDir(), "filename");
(或者getDir()
)我真的不记得你了必须测试它。