Android无法记住我的文件

时间:2013-07-26 16:17:16

标签: java android eclipse file

我正在写一个记事本应用程序,我正在弹出create a password屏幕,直到你创建了一个,然后会弹出log in屏幕。

以下是一些示例代码:

File myFile = new File(getFilesDir() + "pass.txt");
if (!myFile.exists()) // if "pass.txt" DOESN'T exist, make them create a password
{ 
    try {

    // this writes the password to the "pass.txt" file 
    // which is the one that is checked to exist.
    // after it is written to, it should always exist.
    FileOutputStream fos = openFileOutput("pass.txt", Context.MODE_PRIVATE);
    fos.write(pass.getBytes());

    // this writes the security question to a different file.
    fos = openFileOutput("securityQ.txt", Context.MODE_PRIVATE);
    fos.write(secQ.getBytes());

    // this writes the security answer to a different file.
    fos = openFileOutput("securityAnswer.txt", Context.MODE_PRIVATE);
    fos.write(secAns.getBytes());

    fos.close();

} catch(Exception e) {}

^这是一种方法。然后,在另一个我这样做:

try { // input the right password to the String data
    char[] inputBuffer = new char[1024];
    fIn = openFileInput("pass.txt");
    isr = new InputStreamReader(fIn);
    isr.read(inputBuffer);
    data = new String(inputBuffer);
    isr.close();
    fIn.close();
}catch(IOException e){}

if (password.getText().toString().equals(data)) // if password is right, log in.
{
    loggedin();
}
else // if the password entered is wrong, display the right one.
{
    TextView scr = (TextView)findViewById(R.id.display);
    scr.setText("." + data + "."+'\n'+"." + password.getText().toString() + ".");
}

问题是,即使正确输入密码并且显示器证明了密码,用户也无法登录。

另一个问题是,无论何时我再次运行应用程序,它都会进入创建屏幕,这意味着它会识别该文件不存在(即使我刚刚写入它)。

我已经处理了整个项目的文件,它可以跟踪输入的文本,这样当你按下按钮时,它会将文件读回给你。即使你关闭它,它也会跟踪你输入的内容。但出于某种原因,密码不起作用。

以下是所发生事件的图像(第一个.k.是从"pass.txt"文件读取的数据,第二个.k.是用户从String输入的EditText {1}}):

enter image description here

登录问题的解决方案:

String values look the same but don't ".equals()" each other

只需在密码用户输入上使用.trim()方法。

2 个答案:

答案 0 :(得分:2)

我将传递关于在名为“pass.txt”的文件中保存密码的评论,并专注于技术部分。

File myFile = new File(getFilesDir() + "pass.txt");

myFile永远不会是有效的文件。路径和文件名之间没有分隔符/。由于那永远不会是虚荣的,下一行会说它不存在并经过整个街区。

您可以轻松解决以下两种方式之一:

File myFile = new File(getFilesDir() + "/pass.txt");

只需将分隔符添加到文件名中即可。

File myFile = new File(getFilesDir(), "pass.txt");

这可能是更好的选择,因为它使用显式path, file构造函数。但是,任何一个都没问题。

答案 1 :(得分:0)

您也可以使用context.openFileInput("pass.txt");并捕获FileNotFoundException是否发生,此时您可以“假设”该文件实际上不存在。