这个问题着实让我很蛋疼啊,刚开始怎么都不知道,就照着网上的找了java读操作的实例,他是这样读的
File file=new File(path); if(!file.exists()||file.isDirectory()) throw new FileNotFoundException(); FileInputStream fis=new FileInputStream(file); byte[] buf = new byte[1024]; StringBuffer sb=new StringBuffer(); while((fis.read(buf))!=-1){ sb.append(new String(buf)); buf=new byte[1024];//重新生成,避免和上次读取的数据重复 } return sb.toString();
当然还有这样的
FileInputStream fis = openFileInput("province"); InputStreamReader isr = new InputStreamReader(fis); char[] buffer = new char[100]; while(isr.read(buffer) > 0){ blacklistString += String.copyValueOf(buffer); } isr.close();
这两种方法都是可以读出来的,但是仔细你就会发现,因为定义的是
byte[] buf = new byte[1024];
或者是
char[] buffer = new char[100];
这样的话就会发生最后一个byte数组或者char数组是未满的,也就后面全是'\0',问题所在,接着就是发生String变量的最后字符是很多个'\0',下图为证:
清楚明了~~~~~~~~~~
这是需要注意的地方
所以有另外一种读的方式
//利用BufferedReader读取 //在IO操作,利用BufferedReader和BufferedWriter效率会更高一点 public String BufferedReaderDemo(String path) throws IOException...{ File file=new File(path); if(!file.exists()||file.isDirectory()) throw new FileNotFoundException(); BufferedReader br=new BufferedReader(new FileReader(file)); String temp=null; StringBuffer sb=new StringBuffer(); temp=br.readLine(); while(temp!=null)...{ sb.append(temp+" "); temp=br.readLine(); } return sb.toString(); }
看看
这种读的方式按照android官网来说应该是每次读到截至符,我就不翻译了,很简单的英语
Returns the next line of text available from this reader. A line is represented by zero or more characters followed by '\n'
, '\r'
, "\r\n"
or
the end of the reader. The string does not include the newline sequence.
行了,基本就是这个问题了
谢谢~~~