Rzeczy są proste, ale nie działają zgodnie z założeniami.Android odczytuje plik źródłowy surowca
Mam plik tekstowy dodany jako surowiec. Plik tekstowy zawiera tekst jak:
b) Jeżeli obowiązujące prawo wymaga ŻADNYCH GWARANCJI W ODNIESIENIU DO OPROGRAMOWANIA, WSZELKIE TAKIE GWARANCJE SĄ ograniczone w czasie do dziewięćdziesięciu (90) DNI OD DATY DOSTAWY .
(c) nie USTNE lub informacja pisemna lub UDZIELONA wirtualne orientację, ITS DEALERZY, dystrybutorów, środki lub pracowników nie stanowią GWARANTUJE w żaden sposób ZWIĘKSZENIE zakresu jakiegokolwiek GWARANCJI zapewnianych niniejszym .
(d) (tylko USA) Niektóre członkowskie nie POZWOLI NA WYŁĄCZENIE GWARANCJI DOMNIEMANYCH , WIĘC POWYŻSZE WYŁĄCZENIE MOŻE NIE ZASTOSOWANIA. NINIEJSZA GWARANCJA DAJE PAŃSTWU OKREŚLONEGO PRAWA I MOŻE PAŃSTWO POSIADAĆ INNE PRAWA PRAWNE, KTÓRE RÓŻNIĄ SIĘ W ZALEŻNOŚCI OD STANU DO STANU.
na ekranie mam układ takiego:
<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>
kodu do odczytu zasób surowca wynosi:
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();
}
Tekst dostać pokazały jednak po każdym wierszu otrzymuję dziwna postać [] Jak mogę usunąć tę postać? Myślę, że to Nowa Linia.
roztwór roboczy
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();
}
nie jestem pewien, że Inputstream.available() jest poprawny wybór tutaj raczej czytać n do ByteArrayOutputStream aż n == -1. – ThomasRS
To może nie działać w przypadku dużych zasobów. Zależy od rozmiaru bufora odczytu strumienia wejściowego i może tylko zwrócić część zasobu. – d4n3
@ d4n3 ma rację, dokumentacja dostępnej metody strumienia wejściowego stwierdza: "Zwraca szacowaną liczbę bajtów, które można odczytać lub pominąć bez blokowania w celu uzyskania większej ilości danych wejściowych: Należy zauważyć, że ta metoda zapewnia tak słabą gwarancję, że nie jest bardzo przydatne w praktyce " – ozba