我编写了一个java socket服务器程序,它连续监听端口.它为传入的数据创建一个新的文本文件,但我想每隔30分钟创建一个新的文本文件.
有人可以帮我安排这个每隔30分钟运行一次吗?
谢谢.
@paul:我有以下代码:
import java.io.*;
import java.net.*;
import java.util.*;
import java.text.*;
import java.util.Timer;
import java.util.TimerTask;
public class DateServer extends Thread {
static public String str;
public static void main(String args[]) {
String pattern = "yyyyMMdd-hhmm";
SimpleDateFormat format = new SimpleDateFormat (pattern);
str = format.format(new Date());
int delay = 0;
int period = 180000;
Timer timer = new Timer();
ServerSocket echoServer = null;
String line = null;
DataInputStream is;
PrintStream os;
Socket clientSocket = null;
try {
echoServer = new ServerSocket(3000);
}
catch (IOException e) {
System.out.println(e);
}
try {
clientSocket = echoServer.accept();
is = new DataInputStream(clientSocket.getInputStream());
os = new PrintStream(clientSocket.getOutputStream());
while (true) {
line = is.readLine();
os.println("From server: "+ line);
System.out.println(line);
timer.scheduleAtFixedRate(new TimerTask() {
public void run(){
try{
FileWriter fstream = new FileWriter("C://" +str+".txt",true);
BufferedWriter out = new BufferedWriter(fstream);
out.write(line);
out.newLine();
out.flush();
out.close();
}catch (Exception e){//Catch exception if any
System.err.println("Error: " + e.getMessage());
}
}
}}, delay, period);
}
catch (IOException e) {
System.out.println(e);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在"timer.scheduleAtFixedRate(new TimerTask()"这一行,它给出了以下错误:[没有为scheduleAtFixedRate()方法找到合适的方法java.util.Timer.scheduleAtFixedRate(java.util.TimerTask,java.util.Date ,long)不适用(实际和形式参数列表长度不同)方法java.util.Timer.scheduleAtFixedRate(java.util.TimerTask,long,long)不适用(实际和形式参数列表的长度不同)]
在"line = is.readLine();" 它给出了以下错误:[无法为最终变量行赋值].
我是java的新手.我很遗憾这个可怕的缩进.请帮我.
您的服务器只需创建一个每30分钟触发一次的定时间隔并创建该文件.请参阅此处的示例,Java文档和另一个示例.
这是代码片段,其中包含一些针对您情况的mod:
int delay = 0; // delay for - no delay
int period = 1800000; // repeat every 1.8 mil milliseconds = 30 minutes
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
// Create file here
}
}, delay, period);
Run Code Online (Sandbox Code Playgroud)
并修复了代码:
import java.io.*;
import java.net.*;
import java.util.*;
import java.text.*;
import java.util.Timer;
import java.util.TimerTask;
public class DateServer extends Thread {
public static void main(String args[]) {
new Runner().go();
}
}
class Runner {
public static LinkedList<String> data = new LinkedList<String>();
public void go() {
ServerSocket echoServer = null;
MyTimerTask timerTask = new MyTimerTask();
new Timer().scheduleAtFixedRate(timerTask, 0, 2000);
try {
echoServer = new ServerSocket(3000);
}
catch (IOException e) {
System.out.println(e);
}
try {
Socket clientSocket = echoServer.accept();
DataInputStream is = new DataInputStream(clientSocket.getInputStream());
PrintStream os = new PrintStream(clientSocket.getOutputStream());
while (true) {
String line = is.readLine();
data.add(line);
os.println("From server: "+ line);
System.out.println(line);
}
}
catch (IOException e) {
System.out.println(e);
}
}
}
class MyTimerTask extends TimerTask {
public void run() {
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd-hhmm");
String line = null;
System.out.print(".");
try {
String str = format.format(new Date());
FileWriter fstream = new FileWriter("C://" +str+".txt",true);
BufferedWriter out = new BufferedWriter(fstream);
while (Runner.data.size() > 0) out.write(Runner.data.getLast());
out.newLine();
out.flush();
out.close();
} catch (Exception e) {//Catch exception if any
System.err.println("Error: " + e.getMessage() + e.getStackTrace()[0].toString());
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6034 次 |
| 最近记录: |