Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Android中返回FileInputStream的值_Java_Android - Fatal编程技术网

Java 如何在Android中返回FileInputStream的值

Java 如何在Android中返回FileInputStream的值,java,android,Java,Android,我有一个基于FileInputStream的函数,它应该返回她从文件中读取的字符串。但是为什么返回值为空。 函数的返回值应显示在MainActivity中。 此功能是我的应用程序中服务的一部分 public static String UserLoginFile; public static String UserPassFile; public String LoadUserInfopassFromFilePostData() { String FILENAME = "T

我有一个基于FileInputStream的函数,它应该返回她从文件中读取的字符串。但是为什么返回值为空。 函数的返回值应显示在MainActivity中。 此功能是我的应用程序中服务的一部分

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()