修改后下载HTML文件

时间:2014-02-02 14:23:05

标签: android html file download jsoup

我正在尝试实现一个正在下载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());
        }
    }
}

1 个答案:

答案 0 :(得分:0)

错误在这一行new File("tabelle.html");中,它在Linux根分区中创建一个文件,这是一个系统专用区域。检查[THIS LINK] [1]以正确方式访问Android上磁盘中的文件。

请记住,如果您打算使用外部存储(对于您认为不应该使用的用例),则需要WRITE_EXTERNAL_STORAGE权限。

修改

我注意到您使用openFileOutput()写入文件。这是与使用new File()

创建时不同的位置

如@hgoebl所述,要将文件放在与openFileOutput()相同的位置,您应该使用new File(getCacheDir(), "filename");(或者getDir())我真的不记得你了必须测试它。