网络请求html文件存放本地以及读取

下载html到本地的sd卡中

首先引入Jar包 commons-io-2.8.0.jar

写入工具类DownloadHTML

private static final String TAG = DownloadHTML.class.getSimpleName();

    public static void downloadFileFromUrl(String fileName, String downloadUrl, String savePath) throws IOException {
        boolean result = false;
        File file = new File(savePath + File.separator + fileName + ".html");
        if (file.exists()) {
            Log.e(TAG, "删除已存在的文件");
            file.delete();
        }
        long begin = System.currentTimeMillis();
        URL url = new URL(downloadUrl);
        org.apache.commons.io.FileUtils.copyURLToFile(url, file);
        long end = System.currentTimeMillis();
        Log.e(TAG, "文件下载耗时:" + (end - begin) / 1000 + "s");
    }

调用方式

DownloadHTML.downloadFileFromUrl("自己定义的文件名字", "URL的网址", "保存的路径");
//获取本地SD卡的路径
String mSdPath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator;
//mSdPath就为当前sd卡的路径,可以再sd卡里面创建文件夹,就如下面代码
String mSavePath = mSdPath + "Url";  //这样保存的路径就为mSavePath(Url文件夹会自己创建)

这样就进行了HTML的保存。

读取本地的HTML

1.首先在res目录下面创建xml文件夹

2.在xml文件夹下面创建文件读取文件目录

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <!--这个html就是下载文件的后缀,Url就是存放的sd目录下面的文件夹名称-->
    <external-path name="html" path="Url" />
</paths>

3.在Manifest加入下列权限

<uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE " />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <!--在sdcard中创建/删除文件的权限 -->
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
        tools:ignore="ProtectedPermissions" />

4.在Manifest里面加入provider

<application
         android:usesCleartextTraffic="true"       
         <provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="com.mydomain.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/创建的xml目录下的文件" />
        </provider>
    </application>

5.创建WebView并设置属性

WebView webView = findViewById(R.id.webview);
    WebSettings webSettings = webView.getSettings();
    webSettings.setAllowFileAccess(true);
    webSettings.setAllowContentAccess(true);

6.获取路径

File file = new File("获取SD卡保存的路径" + File.separator + "文件名");
         Uri  uri = FileProvider.getUriForFile(context,"com.mydomain.fileprovider", file);

7.加载本地Url

webview.loadUrl(uri.toString());
        webview.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                return false;
            }
        });

大功告成!

经验分享 程序员 微信小程序 职场和发展