我正在写一个记事本应用程序,我正在弹出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}}):
登录问题的解决方案:
String values look the same but don't ".equals()" each other
只需在密码用户输入上使用.trim()
方法。
答案 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
是否发生,此时您可以“假设”该文件实际上不存在。