我正在尝试编写一个可以读写文件的Java Android程序。我有一些问题。当运行最后一行时,Eclipse告诉我,我的totalString变量可能尚未初始化。但是,我在try循环中为它赋值。当我删除最后一行并运行我的程序时,我的控制台显示“Read Filefully Successfully”,以及“java.io.FileInputStream@d77ffd1”。这绝对不是我写给文件的价值。我不知道我在这里做错了什么,我有点失去理智。另外,如果我尝试添加像
这样的行totalString = "A Test Value"
在try块中,我仍然得到同样的错误。任何帮助将不胜感激。
//lets try WRITING the file
Context context = getApplicationContext();
String filename = "balance";
String balanceString = "0.00";
FileOutputStream outputStream;
try {
outputStream = openFileOutput(filename, Context.MODE_PRIVATE);
outputStream.write(balanceString.getBytes());
outputStream.close();
}
catch (Exception e) {
e.printStackTrace();
System.out.println("Error in Writing File.");
}
//lets try READING the file
String totalString;
FileInputStream inputStream;
try {
inputStream = openFileInput(filename);
inputStream.read();
inputStream.close();
totalString = inputStream.toString();
System.out.println("Read File Successfully");
System.out.println(totalString);
}
catch (Exception e) {
e.printStackTrace();
System.out.println("Error in Reading File.");
}
System.out.println(totalString);
答案 0 :(得分:1)
inputStream.read()MIGHT抛出异常。在这种情况下,变量MIGHT不能被初始化。只需将声明更改为
即可String totalString = null;
或者,您可以将System.out.println移动到try-block的末尾,其中,当到达时因为没有抛出异常,该变量被初始化。
答案 1 :(得分:1)
inputStream.toString()
返回字符串,表示InputStream
对象的ID 。不是文件中的数据。
如果您想要从InputStream
读取文件中的数据,则需要使用内置方法来读取文件。最简单的方法是将InputStream
对象包装在BufferedReader
(或任何其他Reader
对象)中,然后使用.readLine()
(或等效)方法获取数据。
例如:
String totalString;
BufferedReader in;
try {
in = new BufferedReader(new InputStreamReader(openFileInput(filename)));
totalString = in.readLine();
in.close();
System.out.println("Read File Successfully");
System.out.println(totalString);
}
catch (Exception e) {
e.printStackTrace();
System.out.println("Error in Reading File.");
}
现在输出:
您可以使用与以前完全相同的技术,只需将对象更改为他们的作家'等价物。例如:
PrintWriter out;
try {
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(penFileOutput(filename, Context.MODE_PRIVATE))));
out.println(balanceString);
out.flush();
out.close();
}
catch (Exception e) {
e.printStackTrace();
System.out.println("Error in Writing File.");
}
除了BufferedWriter之外,在这里使用PrintWriter的目的是因为它提供了非常容易使用的方法(即println()
)。此外,' flush()'方法用于确保流中的所有数据都写入文件,而不是“卡住”。在缓冲区。
答案 2 :(得分:0)
另外,阅读一些有关读取和写入文件的教程。
inputStream.read()将从流中读取一个字节。但是,如果您不将该函数的返回值赋给变量,则将其丢弃。
inputStream.toString()完成它所说的。它试图描述对象,而不是流的内容。
答案 3 :(得分:0)
我会这样做
FileOutputStream outputStream=new FileOutputStream(filename);
ObjectOutputStream stringSaver = new ObjectOutputStream(outputStream);
stringSaver.writeObject(balanceString);
stringSaver.close();
outputStream.close();
所有这一切都在try中保存文件中的String然后用
加载它 FileInputStream inputStream = new FileInputStream(filename);
ObjectInputStream objectStream = new ObjectInputStream(inputStream);
totalString = (String) objectStream.readObject();
objectStream.close();
inputStream.close();
这也是试试抓... 它应该工作。 该问题解决了一个变量可能尚未初始化。
当你不明白代码的一部分可以自由地问:D