问题
I'm still making my clock. I want to save/load my data from when I use the clock so when I close at a specific time(like January 23rd), when I re-open eclipse I can do something so it brings me back to said time. Any ideas? (Snippits requested)
import java.util.Scanner;
import static java.lang.System.out;
public class Clock {
public static void main(String args[]) throws InterruptedException {
Scanner keyboard = new Scanner(System.in);
out.print("Set the week and day.");
String specday = null;
String days = null;
String season = null;
String morning = null;
String month = null;
int inputweek = keyboard.nextInt();
int inputday = keyboard.nextInt();
int week = inputweek;
int day = inputday;
int hours = 1;
int minutes = 0;
int seconds = 0; {
}
for (;seconds <= 60; seconds++) {
Thread.sleep(1);
if (seconds == 60) minutes++; {
if (minutes == 60) hours++; {
if (hours == 24) day++; {
if (day == 7 && hours == 23 && minutes == 59 && seconds == 59)week++; {
if (week > 0 && week < 9) season = " summer";
if (week > 44 && week < 49) season = " summer";
if (week > 8 && week < 21) season = " autumn";
if (week > 20 && week < 33) season = " winter";
if (week > 32 && week < 45) season = " spring";
if (week > 0 && week < 5) month = " january";
if (week > 4 && week < 9) month = " february";
if (week > 8 && week < 13)month = " march";
if (week > 12 && week < 17) month = " april";
if (week > 16 && week < 21) month = " may";
if (week > 20 && week < 25) month = " june";
if (week > 24 && week < 29) month = " july";
if (week > 28 && week < 33) month = " august";
if (week > 32 && week < 37) month = " september";
if (week > 36 && week < 41) month = " october";
if (week > 40 && week < 45) month = " november";
if (week > 44 && week < 49) month = " december";
if (week == 47 && day == 2) specday = " christmas eve";
if (week == 47 && day == 3) specday = " christmas";
if (week == 47 && day == 4) specday = " boxing day";
if (hours < 12) morning = " am";
if (hours > 11) morning = " pm";
if (day == 1) days = " monday";
if (day == 2) days = " tuesday";
if (day == 3) days = " wednesday";
if (day == 4) days = " thursday";
if (day == 5) days = " friday";
if (day == 6) days = " saturday";
if (day == 7) days = " sunday";
}
System.out.println(hours + ":" + minutes + ":" + seconds + morning + days + month + season + specday); {
if (seconds == 60) seconds = 0;
if (minutes == 60) minutes = 0;
if (hours == 24) hours = 0;
if (day > 7) day = 1;
if (week == 49) week = 1;
if (specday == null); specday = " ";
}
}
}
}
}
}
}
回答1:
Clock MUST implement Serializable
public Clock implements Serializable{
//logic
}
How to serialize the state of Clock:
FileOutputStream fileOut =
new FileOutputStream("/tmp/clock.state");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(clockInstance);
out.close();
fileOut.close();
How to read on next run:
FileInputStream fileIn = new FileInputStream("/tmp/clock.state");
ObjectInputStream in = new ObjectInputStream(fileIn);
clockInstance = (Clock) in.readObject();
in.close();
fileIn.close();
回答2:
Properties uses a basic key/value String
pair for storing a value against a specific key.
It also has convenient store
and load
methods
FileReader reader = null;
Properties properties = new Properties();
try {
reader = new FileReader("clock.properties");
properties.load(reader);
} catch (IOException exp) {
exp.printStackTrace();
}
String lastTime = reader.getProperty("Clock.lastTime");
// Use something like SimpleDateFormat to parse the String back to a Date if required...
or
String strHour = reader.getProperty("Clock.lastHour", "0");
String strMin = reader.getProperty("Clock.lastMinute", "0");
String strSec = reader.getProperty("Clock.lastSecond", "0");
// Use Integer.toString to parse the results, don't forget to check for nulls ;)
You could also use the Preferences API which is similar to the Properties
API but supports automatic saving and support for primitive data types
来源:https://stackoverflow.com/questions/18568147/saving-loading-data