Java 读取和写入日志文件

Java 读取和写入日志文件,java,android,io,Java,Android,Io,我正在处理我的应用程序,并且我自己设计了这个应用程序中的算法,当您选择单选按钮1(例如)等时,算法将在日志文件中写入一个默认数字,当用户离开应用程序然后重新打开它时,算法将读取日志文件中的数字,然后根据日志文件中的默认数字启动活动 现在回到我的问题,我现在的问题是关于算法,因为我们在日志文件中有这么多的数字,而算法无法得到最后一个数字,我如何解决它 注意:当用户打开Main\u Page\u FA.class时,算法将数字143写入日志文件,当用户打开Main\u Page.class时,算法将

我正在处理我的应用程序,并且我自己设计了这个应用程序中的算法,当您选择单选按钮1(例如)等时,算法将在日志文件中写入一个默认数字,当用户离开应用程序然后重新打开它时,算法将读取日志文件中的数字,然后根据日志文件中的默认数字启动活动

现在回到我的问题,我现在的问题是关于算法,因为我们在日志文件中有这么多的数字,而算法无法得到最后一个数字,我如何解决它

注意:当用户打开
Main\u Page\u FA.class
时,算法将数字143写入日志文件,当用户打开
Main\u Page.class
时,算法将数字123写入日志文件

这是我的密码:

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
BufferedWriter MakeDir = new BufferedWriter(new FileWriter("/mnt/sdcard/test.log", true));
MakeDir.close();
} catch (IOException e) {
}

try {
BufferedReader out = new BufferedReader(new FileReader("/mnt/sdcard/test.log"));
String LogCodes = out.readLine();
String [] LogSplits = LogCodes.split(",");
int LogCharSize = LogSplits.length;
String LogResults = LogSplits[LogCharSize -1];
if (LogCharSize > 1){
if (LogResults == "123"){
startActivity(new Intent(Splash_Page.this, Main_Page.class));   
}else if (LogResults == "148"){
startActivity(new Intent(Splash_Page.this, Main_Page_FA.class));
}else if (LogCodes == null){
startActivity(new Intent(Splash_Page.this, Main_Page.class));
}
}
out.close();
} catch (IOException e) {
}

谢谢

使用java.io.RandomAccessFile,您可以使用它查找文件中的确切位置(在您的案例中,它是文件的结尾)并读取最后一个数字。这样,您将避免在内存中读取整个文件,这既耗时又占用内存


因为您将数字存储为字符串,所以您必须读取最后100个字节,并通过编程方式(通过查找最后一个逗号)查找最后一个数字。

好的,我正在更改我的算法,并使另一个算法检测文件是否为空,这很好,下面是我的代码:

try {
String ExternalLocation = Environment.getExternalStorageDirectory().getAbsolutePath();
File MakeLogDir = new File(ExternalLocation + "/TESTFolder");
MakeLogDir.mkdirs();
BufferedWriter PersianLog = new BufferedWriter(new FileWriter(ExternalLocation + "/TESTFolder/test1.log",true));
BufferedWriter EnglishLog = new BufferedWriter(new FileWriter(ExternalLocation + "/TESTFolder/test2.log",true));
BufferedReader PersianLogFile = new BufferedReader(new FileReader(ExternalLocation + "/TESTFolder/test1.log"));
BufferedReader EnglishLogFile = new BufferedReader(new FileReader(ExternalLocation + "/TESTFolder/test2.log"));
int PersianLogResults = PersianLogFile.read();
int EnglishLogResults = EnglishLogFile.read();
if (PersianLogResults == -1){
startActivity(new Intent(Splash_Page.this, Main_Page.class));
}else if (EnglishLogResults == -1){
startActivity(new Intent(Splash_Page.this, Main_Page_FA.class));
}
PersianLog.close();
EnglishLog.close();
PersianLogFile.close();
EnglishLogFile.close();
} catch (IOException e) {
}

这种算法只适用于纯文本文件,即使您将编码更改为UTF-8,所以我更喜欢使用第二种方法。这是我自己的经验。