1:最方便的、永久保存的数据库方式。
一个程序执行完后,把结果存入到数据库中,下一个程序启动初始化后再去数据库中查找是否已经存在相应的信息。这种方式的好处:存储方便,只需借助数据库的存储即可,永久保存(保存在磁盘中);缺点:需要借助数据库
2:借助操作系统的文件系统,也就是Java中的File类、BufferedReader、PrintWriter来把信息存入文件中,下一个程序启动的时候就可以取出这个文件中的信息,其实它和上面的数据库原理一样,都是借助磁盘和文件系统,不同的是:数据库已经完成了对文件的操作,而不再需要我们写程序去对文件进行操作。
3:利用ServerSocket和socket机制,把结果交给服务器端进行管理,而与客户端程序无关,就算客户端程序重新初始化,但是信息已经交由服务器端管理,而且结果保存在内存中,速度比较快。
这种方式特别适合于文件中有多个账号,但是每次登录就需要逐一的取出来,不能够重复。如果是直接对文件进行操作那么需要进行如下的处理
1:将文件用BufferedReader逐条写入linkedList中,
2:获得并删除第一条linkedList.getIndex(0),linkedList.remove(0)
3:最后,将linkedList中的信息重新写回文件中。
如果借助ServerSocket和socket机制,那么就简单多了,代码如下:
1:)Server端
package justTest;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.LinkedList;
public class LoadurnnerServer {
public static void main(String[] args) {
LinkedList<String> linkedList = new LinkedList<String>();
try {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream("D:/LiufuKin/AccountNum.txt"),"UTF-8"));
String strTemp = "";
while((strTemp = bufferedReader.readLine()) != null && !strTemp.equals("")){
linkedList.add(strTemp);
}
bufferedReader.close();
ServerSocket serverSocket = new ServerSocket(4700);
while(true){
Socket socket = serverSocket.accept();
PrintWriter printWriter = new PrintWriter(socket.getOutputStream());
printWriter.print(linkedList.get(0));
printWriter.flush();
printWriter.close();
socket.close();
System.out.println(linkedList.get(0));
linkedList.remove(0);
}
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
2:)client端
package justTest;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.Socket;
import java.net.UnknownHostException;
public class TempJava {
//这里可以写一些全局变量供所有函数使用
static String accountNum = "";
public static void main(String[] args) {
try {
accountNum = new BufferedReader(new InputStreamReader(new Socket("192.168.7.130", 4700).getInputStream(),"utf-8")).readLine();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(accountNum);
}
}
总结:这三中方式,各有优缺点,需要根据不同的需求来利用。