Android 读取文件将返回不带“quot”的长字符串;空格、换行符“;

Android 读取文件将返回不带“quot”的长字符串;空格、换行符“;,android,io,Android,Io,大家好 我正在尝试根据列表选择读取一些文件(从资源中)。下面的代码打开文件并检索内容,甚至是阿拉伯语字母。唯一的问题是文本是一个很长的字符串,没有任何空格或换行符。例如,文件内容为: 一线 第二线 第三行 输出将是:firstlinesecondlinethirdline 代码是: public void onItemSelected(AdapterView parent, View v, int position, long id) { String filename = getFi

大家好

我正在尝试根据列表选择读取一些文件(从资源中)。下面的代码打开文件并检索内容,甚至是阿拉伯语字母。唯一的问题是文本是一个很长的字符串,没有任何空格或换行符。例如,文件内容为: 一线 第二线 第三行

输出将是:firstlinesecondlinethirdline

代码是:

public void onItemSelected(AdapterView parent, View v,
int position, long id) {

    String filename = getFileName(position);
    InputStreamReader ls = null;

    try {
        AssetManager am = getResources().getAssets();
         ls = new InputStreamReader(am.open(filename), "UTF-8");


            StringBuffer sb = new StringBuffer();
            while( true ) {
                int c = ls.read();
                if( c < 0 )
                    break;
                if( c >= 32 )
                    sb.append( (char)c );       
        selection.setText(new String(sb));
            }

    } catch(IOException e) {
        Log.e(LOG_APP_TAG, e.getMessage());
    } finally {
        if (ls != null) {
            try {
                ls.close();
            } catch (IOException e) {
                Log.e(LOG_APP_TAG, e.getMessage());
            }
        }
    }


}
public void已选中(AdapterView父视图、视图v、,
内部位置,长id){
字符串文件名=getFileName(位置);
InputStreamReader ls=null;
试一试{
AssetManager am=getResources().getAssets();
ls=新的InputStreamReader(am.open(文件名),“UTF-8”);
StringBuffer sb=新的StringBuffer();
while(true){
int c=ls.read();
if(c<0)
打破
如果(c>=32)
sb.附加((char)c);
selection.setText(新字符串(sb));
}
}捕获(IOE异常){
Log.e(Log_APP_标记,e.getMessage());
}最后{
如果(ls!=null){
试一试{
ls.close();
}捕获(IOE异常){
Log.e(Log_APP_标记,e.getMessage());
}
}
}
}

新行的字符值为10(0),因此更改为

 if( c <= 0 )
    break;
  else
    sb.append( (char)c );  

如果(c您的代码有几个问题:

  • 不建议使用关键字break
  • 使用带有条件(true)的循环,并在出现问题时中断它,这与“goto编程”非常接近,应该避免
你可以吃点像这样的东西

boolean finished = true;
while( !finished )
{
   if( c < 0 ) 
      finished = true;
}//while
BuffereReader将使用一个缓冲区一次从文件中读取多个字节,这样效率更高

顺便说一句,您尝试/捕获/最终结构做得很好

问候,,
Stéphane

使用
扫描仪
缓冲读取器
。。。
BufferedReader bfr = new BufferedReader( new InputStreamReader(am.open(filename), "UTF-8"); );
StringBuffer sb = new StringBuffer();
String read = "";
while( (read=bfr.readLine()) != null )
  sb.apennd( read );