安排一个java程序

gsb*_*gsb 2 java

我编写了一个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)
  1. 在"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)不适用(实际和形式参数列表的长度不同)]

  2. 在"line = is.readLine();" 它给出了以下错误:[无法为最终变量行赋值].

我是java的新手.我很遗憾这个可怕的缩进.请帮我.

Pau*_*sik 5

您的服务器只需创建一个每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)