网络请求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;
}
});
大功告成!
