it-swarm.com.de

Android-Rohtextdatei für Textlesen

Die Dinge sind einfach, funktionieren aber nicht so, wie sie sollen.

Ich habe eine Textdatei als Rohressource hinzugefügt. Die Textdatei enthält Text wie:

b) WENN ANWENDBARES RECHT JEGLICHE GARANTIEN IM HINBLICK AUF DIE .__ ERFORDERT. SOFTWARE, ALLE SOLCHEN GARANTIEN SIND BEGRENZT AUF DAUER BIS 90 (.) TAGE AB LIEFERDATUM.

(c) KEINE MÜNDLICHEN OR SCHRIFTLICHEN INFORMATIONEN ODER BERATUNG DURCH VIRTUELLE ORIENTEERING., IHRE HÄNDLER, VERTRIEBSPARTNER, AGENTEN ODER MITARBEITER ERSTELLEN EINE GARANTIE ODER IN JEDER WEISE DEN BEREICH VON JEDEM ERHALTEN GEWÄHRLEISTUNG. 

(d) (nur USA) EINIGE STAATEN NICHT ERLAUBEN SIE DEN AUSSCHLUSS VON IMPLIED. GEWÄHRLEISTUNGEN, SO DER OBEN GENANNTE AUSSCHLUSS KANN Gilt nicht für Sie. DIESE GARANTIE GIBT SIE SPEZIFISCHE RECHTE UND SIE KÖNNEN HABEN AUCH ANDERE RECHTE, DIE VARION VON STAAT ZU STAAT.

Auf meinem Bildschirm habe ich ein Layout wie folgt:

<LinearLayout  xmlns:Android="http://schemas.Android.com/apk/res/Android"
                     Android:layout_width="fill_parent" 
                     Android:layout_height="wrap_content" 
                     Android:gravity="center" 
                     Android:layout_weight="1.0"
                     Android:layout_below="@+id/logoLayout"
                     Android:background="@drawable/list_background"> 

            <ScrollView Android:layout_width="fill_parent"
                        Android:layout_height="fill_parent">

                    <TextView  Android:id="@+id/txtRawResource" 
                               Android:layout_width="fill_parent" 
                               Android:layout_height="fill_parent"
                               Android:padding="3dip"/>
            </ScrollView>  

    </LinearLayout>

Der Code zum Lesen der Rohressource lautet:

TextView txtRawResource= (TextView)findViewById(R.id.txtRawResource);

txtDisclaimer.setText(Utils.readRawTextFile(ctx, R.raw.rawtextsample);

public static String readRawTextFile(Context ctx, int resId)
{
    InputStream inputStream = ctx.getResources().openRawResource(resId);

    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

    int i;
    try {
        i = inputStream.read();
        while (i != -1)
        {
            byteArrayOutputStream.write(i);
            i = inputStream.read();
        }
        inputStream.close();
    } catch (IOException e) {
        return null;
    }
    return byteArrayOutputStream.toString();
}

Der Text wird angezeigt, aber nach jeder Zeile bekomme ich ein merkwürdiges Zeichen. Wie kann ich das Zeichen entfernen? Ich denke es ist New Line.

ARBEITSLÖSUNG

public static String readRawTextFile(Context ctx, int resId)
{
    InputStream inputStream = ctx.getResources().openRawResource(resId);

    InputStreamReader inputreader = new InputStreamReader(inputStream);
    BufferedReader buffreader = new BufferedReader(inputreader);
    String line;
    StringBuilder text = new StringBuilder();

    try {
        while (( line = buffreader.readLine()) != null) {
            text.append(line);
            text.append('\n');
        }
    } catch (IOException e) {
        return null;
    }
    return text.toString();
}
101
Alin

Was ist, wenn Sie einen zeichenbasierten BufferedReader anstelle von byte-basiertem InputStream verwenden?

BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line = reader.readLine();
while (line != null) { ... }

Vergiss nicht, dass readLine() die New-Lines überspringt!

55
weekens

Sie können dies verwenden:

    try {
        Resources res = getResources();
        InputStream in_s = res.openRawResource(R.raw.help);

        byte[] b = new byte[in_s.available()];
        in_s.read(b);
        txtHelp.setText(new String(b));
    } catch (Exception e) {
        // e.printStackTrace();
        txtHelp.setText("Error: can't show help.");
    }
148
Vovodroid

Wenn Sie IOUtils von Apache "commons-io" verwenden, ist es noch einfacher:

InputStream is = getResources().openRawResource(R.raw.yourNewTextFile);
String s = IOUtils.toString(is);
IOUtils.closeQuietly(is); // don't forget to close your streams

Abhängigkeiten: http://mvnrepository.com/artifact/commons-io/commons-io

Maven:

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.4</version>
</dependency>

Gradle:

'commons-io:commons-io:2.4'
28
tbraun

Mach es lieber so:

// reads resources regardless of their size
public byte[] getResource(int id, Context context) throws IOException {
    Resources resources = context.getResources();
    InputStream is = resources.openRawResource(id);

    ByteArrayOutputStream bout = new ByteArrayOutputStream();

    byte[] readBuffer = new byte[4 * 1024];

    try {
        int read;
        do {
            read = is.read(readBuffer, 0, readBuffer.length);
            if(read == -1) {
                break;
            }
            bout.write(readBuffer, 0, read);
        } while(true);

        return bout.toByteArray();
    } finally {
        is.close();
    }
}

    // reads a string resource
public String getStringResource(int id, Charset encoding) throws IOException {
    return new String(getResource(id, getContext()), encoding);
}

    // reads an UTF-8 string resource
public String getStringResource(int id) throws IOException {
    return new String(getResource(id, getContext()), Charset.forName("UTF-8"));
}

Aus einer Aktivität , hinzufügen

public byte[] getResource(int id) throws IOException {
        return getResource(id, this);
}

oder aus einem Testfall , hinzufügen

public byte[] getResource(int id) throws IOException {
        return getResource(id, getContext());
}

Und achten Sie auf die Fehlerbehandlung - fangen Sie keine Ausnahmen ab und ignorieren Sie sie, wenn Ihre Ressourcen vorhanden sein müssen oder etwas (sehr?) Falsch ist. 

4
ThomasRS

Dies ist eine andere Methode, die auf jeden Fall funktionieren wird, aber ich kann nicht mehrere Textdateien lesen, um sie in mehreren Textansichten in einer einzigen Aktivität anzuzeigen.

TextView helloTxt = (TextView)findViewById(R.id.yourTextView);
    helloTxt.setText(readTxt());
}

private String readTxt(){

 InputStream inputStream = getResources().openRawResource(R.raw.yourTextFile);
 ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

 int i;
try {
i = inputStream.read();
while (i != -1)
  {
   byteArrayOutputStream.write(i);
   i = inputStream.read();
  }
  inputStream.close();
} catch (IOException e) {
 // TODO Auto-generated catch block
e.printStackTrace();
}

 return byteArrayOutputStream.toString();
}
2
borislemke

@borislemke kannst du dies auf ähnliche Weise machen 

TextView  tv ;
findViewById(R.id.idOfTextView);
tv.setText(readNewTxt());
private String readNewTxt(){
InputStream inputStream = getResources().openRawResource(R.raw.yourNewTextFile);
 ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

 int i;
 try {
 i = inputStream.read();
while (i != -1)
  {
   byteArrayOutputStream.write(i);
   i = inputStream.read();
   }
    inputStream.close();
  } catch (IOException e) {
   // TODO Auto-generated catch block
 e.printStackTrace();
 }

 return byteArrayOutputStream.toString();
 }
2
Manish Sharma

Hier geht es um eine Mischung aus den Lösungen von Weekens und Vovodroid.

Sie ist korrekter als die Lösung von Vovodroid und vollständiger als die Lösung von Weekens.

    try {
        InputStream inputStream = res.openRawResource(resId);
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            try {
                StringBuilder result = new StringBuilder();
                String line;
                while ((line = reader.readLine()) != null) {
                    result.append(line);
                }
                return result.toString();
            } finally {
                reader.close();
            }
        } finally {
            inputStream.close();
        }
    } catch (IOException e) {
        // process exception
    }
1
alcsan

1.Erstellen Sie zunächst einen Verzeichnisordner und geben Sie ihm einen Namen im Res-Ordner 2.Erstellen Sie eine TXT-Datei in dem zuvor erstellten Rohordner, und geben Sie ihm einen beliebigen Namen, z. B..articles.txt .... 3. Kopieren Sie den gewünschten Text in die von Ihnen erstellte TXT-Datei "articles.txt" 4. Vergessen Sie nicht, eine Textansicht in Ihre main.xml MainActivity.Java einzuschließen

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_gettingtoknowthe_os);

    TextView helloTxt = (TextView)findViewById(R.id.gettingtoknowos);
    helloTxt.setText(readTxt());

    ActionBar actionBar = getSupportActionBar();
    actionBar.hide();//to exclude the ActionBar
}

private String readTxt() {

    //getting the .txt file
    InputStream inputStream = getResources().openRawResource(R.raw.articles);

    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

    try {
        int i = inputStream.read();
        while (i != -1) {
            byteArrayOutputStream.write(i);
            i = inputStream.read();
        }
        inputStream.close();

    } catch (IOException e) {
        e.printStackTrace();
    }
    return byteArrayOutputStream.toString();
}

Hoffe es hat funktioniert!

1
Fuser14

Hier ist eine Implementierung in Kotlin

    try {
        val inputStream: InputStream = this.getResources().openRawResource(R.raw.**)
        val inputStreamReader = InputStreamReader(inputStream)
        val sb = StringBuilder()
        var line: String?
        val br = BufferedReader(inputStreamReader)
        line = br.readLine()
        while (line != null) {
            sb.append(line)
            line = br.readLine()
        }
        br.close()

        var content : String = sb.toString()
        Log.d(TAG, content)
    } catch (e:Exception){
        Log.d(TAG, e.toString())
    }
1
semloh eh
InputStream is=getResources().openRawResource(R.raw.name);
BufferedReader reader=new BufferedReader(new InputStreamReader(is));
StringBuffer data=new StringBuffer();
String line=reader.readLine();
while(line!=null)
{
data.append(line+"\n");
}
tvDetails.seTtext(data.toString());
1
sakshi agrawal

Hier ist eine einfache Methode, um die Datei text file aus dem Ordner raw zu lesen:

public static String readTextFile(Context context,@RawRes int id){
    InputStream inputStream = context.getResources().openRawResource(id);
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

    byte buffer[] = new byte[1024];
    int size;
    try {
        while ((size = inputStream.read(buffer)) != -1) {
            outputStream.write(buffer, 0, size);
        }
        outputStream.close();
        inputStream.close();
    } catch (IOException e) {

    }
    return outputStream.toString();
}
0
ucMedia