我有下一个问题:
(1)如何检查文件是否存在?我是这样做的MainActivity
onCreate
File f = new File("punteggio.txt");
if(f.exist())
readFromFile();
else{
writeToFile();
readFromFile();
}
但它不起作用,因为每次打开我的应用程序文件都不存在。
(2)另一个问题。 在我的第一个活动中,我从文件中写入和读取没有问题,而在第二个活动中,当我从文件中读取字符串为空时。
主要活动
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textScore = (TextView) findViewById(R.id.textRecord);
File f = new File("punteggio.txt");
if (!f.exists()) {
Log.d(TAG, "Writeee");
writeToFile();
} else {
readFromFile();
}
}
private void readFromFile() {
String ret = "";
try {
FileInputStream fis = openFileInput("punteggio.txt");
byte[] buffer = new byte[(int) fis.getChannel().size()];
fis.read(buffer);
String str = "";
for (byte b : buffer) str += (char) b;
fis.close();
Log.d(TAG, str);
textScore.setText("Record: " + str);
Log.i("STACKOVERFLOW", String.format("GOT: [%s]", str));
} catch (IOException e) {
Log.e("STACKOVERFLOW", e.getMessage(), e);
}
}
public void startGame(View v) {
Intent i = new Intent(MainActivity.this, GamePanel.class);
startActivity(i);
}
private void writeToFile() {
String string = "0";
try {
FileOutputStream fos = openFileOutput("punteggio.txt", Context.MODE_PRIVATE);
fos.write(string.getBytes());
fos.flush();
fos.close();
} catch (IOException e) {
Log.e(TAG, e.getMessage(), e);
}
}
这是第二个活动
private int readFromFile() {
String str = "";
int i = 0;
try {
FileInputStream fis = openFileInput("punteggio.txt");
byte[] buffer = new byte[(int) fis.getChannel().size()];
fis.read(buffer);
for (byte b : buffer) str += (char) b;
i = Integer.parseInt(str);
fis.close();
} catch (IOException e) {
Log.e("STACKOVERFLOW", e.getMessage(), e);
}
Log.d(TAG, "Stringa iiiii: " + i);
return i;
}
变量是空的,为什么? 你能帮助我吗?感谢
答案 0 :(得分:1)
回答(1) - 打开和写入文件取决于文件所在的位置,它可以在手机存储或SD卡中。因此,在实现读取文件系统时,应注意考虑文件的位置。这样,有时会导致错误,无法定位文件。 或者,更好的方法是使用共享偏好。
旁注:在文本文件中存储游戏分数很容易受到攻击,因为用户可以直接编辑文本文件中的分数并改变游戏结果。