Chargement d’une URL dans un fichier TXT dans une vue Web

Je fais une sorte d’application de navigateur. Cela fonctionne comme je veux, sauf pour une chose. Je dois charger une URL dans un .txt dans mon WebView. Le .txt sera dans le répertoire racine du périphérique et l’utilisateur pourra éditer ce .txt à l’aide de l’application. Comment puis-je le faire?

activity_main.xml:

     

MainActivity.java:

 package com.abaco.awser; import android.app.ActionBar; import android.content.Intent; import android.content.pm.ActivityInfo; import android.net.Uri; import android.os.Build; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; public class MainActivity extends AppCompatActivity { WebView web; Ssortingng webURL = "http://www.google.com"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); View decorView = getWindow().getDecorView(); int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN; decorView.setSystemUiVisibility(uiOptions); setContentView(R.layout.activity_main); getSupportActionBar().hide(); if (savedInstanceState != null) ((WebView)findViewById(R.id.web)).restoreState(savedInstanceState); web = (WebView) findViewById(R.id.web); web.loadUrl(webURL); web.setPadding(0, 0, 0, 0); web.getSettings().setLoadWithOverviewMode(true); web.getSettings().setUseWideViewPort(true); web.getSettings().setJavaScriptEnabled(true); this.web.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, Ssortingng url){ view.loadUrl(url); return true; } }); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); web.saveState(outState); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); web.restoreState(savedInstanceState); } @Override public void onBackPressed() { } } 

Il y a deux préoccupations distinctes ici:

  1. obtenir une URL à partir du fichier .txt
  2. chargement d’une URL dans WebView

Vous devriez penser à eux séparément. Vous semblez déjà savoir faire 2. (charger une URL dans WebView ), alors concentrez-vous sur 1.

Vous pouvez apprendre à ouvrir et à lire un fichier en Java à partir de nombreuses ressources. Y compris SO . La seule partie spécifique à Android est l’access au fichier. Les applications Android ont un access restreint à la plupart des emplacements de stockage. Sur les appareils utilisateur (non rootés), les applications n’ont access qu’à quelques emplacements:

Stockage d’applications

Chaque application peut accéder à son propre stockage (dans /data/data/{your.package} ). Vous pouvez ouvrir ces fichiers directement en utilisant openFileInput . Ou obtenez le chemin à l’aide de getFilesDir() .

Stockage externe

Si le fichier se trouve dans /sdcard votre application aura besoin de l’autorisation READ_EXTERNAL_STORAGE et vous devrez peut-être vous assurer que le stockage externe est monté. En savoir plus ici .

/data/local/tmp

C’est un emplacement sur la plupart des appareils Android (mais pas tous ) que toutes les applications peuvent “entrer”. Par conséquent, si vous placez le fichier à cet endroit et assurez-vous qu’il est lisible dans le monde entier ( chmod o+r /data/local/tmp/myfile.txt ) vous pourrez alors l’ouvrir dans n’importe quelle application.

Je voudrais soutenir l’approche de @szym. Ici vous pouvez trouver du code pour une meilleure compréhension.

 File sdcard = Environment.getExternalStorageDirectory(); //Get the text file File file = new File(sdcard,"file.txt"); //Read text from file SsortingngBuilder text = new SsortingngBuilder(); try { BufferedReader br = new BufferedReader(new FileReader(file)); Ssortingng line; while ((line = br.readLine()) != null) { text.append(line); } br.close(); Ssortingng url = ""; Ssortingng urlRegex = "((https?|ftp|gopher|telnet|file):((//)|(\\\\))+[\\w\\d:#@%/;$()~_?\\+-=\\\\\\.&]*)"; Pattern pattern = Pattern.comstack(urlRegex, Pattern.CASE_INSENSITIVE); Matcher urlMatcher = pattern.matcher(text.toSsortingng()); while (urlMatcher.find()) { url = text.toSsortingng().subssortingng(urlMatcher.start(0), urlMatcher.end(0)); break; } if(""!=url){ WebView webview = (WebView) findViewById(R.id.webView1); webview.setWebViewClient(new WebViewClient()); webview.getSettings().setJavaScriptEnabled(true); webview.loadUrl(url); } } catch (IOException e) { //You'll need to add proper error handling here }