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