Java 如何在Android中返回FileInputStream的值
我有一个基于FileInputStream的函数,它应该返回她从文件中读取的字符串。但是为什么返回值为空。 函数的返回值应显示在MainActivity中。 此功能是我的应用程序中服务的一部分Java 如何在Android中返回FileInputStream的值,java,android,Java,Android,我有一个基于FileInputStream的函数,它应该返回她从文件中读取的字符串。但是为什么返回值为空。 函数的返回值应显示在MainActivity中。 此功能是我的应用程序中服务的一部分 public static String UserLoginFile; public static String UserPassFile; public String LoadUserInfopassFromFilePostData() { String FILENAME = "T
public static String UserLoginFile;
public static String UserPassFile;
public String LoadUserInfopassFromFilePostData() {
String FILENAME = "TeleportSAASPass.txt";
FileInputStream inputStream = null;
if(UserLoginFile != null){
try {
inputStream = openFileInput(FILENAME);
byte[] reader = new byte[inputStream.available()];
while (inputStream.read(reader) != -1) {}
UserPassFile = new String(reader);
// Toast.makeText(getApplicationContext(), "GPSTracker " + UserPassFile, Toast.LENGTH_LONG).show();
} catch(IOException e) {
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
}
}
}
}
return UserPassFile;
}
请告诉我如何修复我的函数,以便它可以返回她从文件中读取的字符串 考虑代码之间的差异:
while (inputStream.read(reader) != -1) {}
UserPassFile = new String(reader);
而这个替代方案:
while (inputStream.read(reader) != -1) {
UserPassFile = new String(reader);
}
在您的例子中,在每次read()调用(包括最后一次失败的调用)之后,都会从reader分配UserPassFile。在第二种情况下,UserPassFile仅在读取成功后分配,因此在到达方法末尾时仍应包含要返回的非空字符串
然而,你似乎在做另一件奇怪的事情。您假设您能够在一次读取中读取整个.available()数据量,这可能是正确的(至少如果您能够分配这么大的字节[])。但是,在阅读完这些数据后,您可以再试一次,看看是否失败,这似乎是不必要的。看起来,如果您要假设您可以在一次尝试中读取数据,那么您只需关闭流并在完成后返回—似乎没有令人信服的理由尝试另一次可能失败的读取。否则,如果可能无法在一次读取()中获取所有数据,则应跟踪已获取的数据量,并不断追加,直到读取失败或以其他方式确定已完成。我建议使用输入流读取器。退房 您的代码将类似于:
inputStream = openFileInput(FILENAME);
InputStreamReader( inputstream, "UTF_8"), 8);
StringBuilder response = new StringBuilder();
String line;
//Read the response from input stream line-wise
while((line = reader.readLine()) != null){
response.append(line).append('\n');
}
//Create response string
result = response.toString();
//Close input stream
reader.close();
您是否确保没有捕获任何异常?您也可以尝试使用DataInputStream并改为使用readLine()