`
wangxc
  • 浏览: 209684 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

linux 通过脚本执行java程序

阅读更多
最近在linux上定时执行脚本程序的要求越来越多了,今天的任务是:在linux服务器上编一个脚本,并定时执行该脚本(脚本的目的执行一个java程序,要求java程序要打成jar包)。

1.编写java程序(公司要求我要读取一个txt文件,并将txt文件的不同的ip做一个统计在存放到一个新的txt文件中)
package com.easymorse;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashSet;
import java.util.Iterator;

public class Test1 {

	/**
	 * author jordy
	 */
	public static void main(String[] args) {

		
		HashSet set = new HashSet();
		HashSet set1 = new HashSet();
		String temp = "";
		boolean tf;
		try {
			                              //要读取的txt文件
			FileReader fr = new FileReader("WebRoot\\resource\\welcomelog.txt");  
			BufferedReader in  =   new  BufferedReader(fr);
			
			String line;
			while ((line = in.readLine()) != null){
				temp = line.substring(0, 14);
				tf = set.add(temp);

				if(tf){
					int firstleft = line.indexOf('(');
					int firstright = line.indexOf(')')+1;
					String othercontent = line.substring(firstleft, firstright);
					String allcontent = temp + "   -*-*-*-*-*-*-*-*-  " + othercontent + "\n";
					set1.add(allcontent);
				}
				
			}
			
		    set = null;
			Iterator it = set1.iterator();
			while(it.hasNext()){
				String content = (String)it.next();
				//新文件保存的路径
				write("D:\\123.txt",content);
			}
			
			
			
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}catch (IOException e) {
			e.printStackTrace();
		}
		
		
		
		
	}

	
	public static void write(String path,String content){
		String s = new String();
		String s1 = new String();
		
		try{
			File f = new File(path);
			if(f.exists()){
				System.out.println("文件存在");
			}else{
				System.out.println("文件不存在,正在创建...");
				if(f.createNewFile()){
					System.out.println("文件创建创建成功");
				}else{
					System.out.println("文件创建创建失败");
				}
			}
			
			BufferedReader input = new BufferedReader(new FileReader(f));
			while((s = input.readLine()) != null){
				s1 += s + "\n";
			}
			
			System.out.println("文件以前的内容:" + s1);
			input.close();
			
			s1 += content;
			BufferedWriter output = new BufferedWriter(new FileWriter(f));
			output.write(s1);
			output.close();
			
			
		}catch(Exception e){
			e.printStackTrace();
			
		}
		
		
	}
	
	
}


由于要统计不同的IP,代码中应用了HashSet来存放IP地址。

上述java程序是在windows下编写的,如果在linux服务器上运行,只需要把上面文件的路径和文件更换了就可以了。

2.编写好java程序后,将java程序打成jar文件(环境linux)

我将上述测试好的java类上传到了linux服务器上,考虑到服务器的路径与windows下的路径不同所以我在服务器上将上述代码更改为服务器上的代码了。

(1) 修改文件路径
sudo vim Test1.java


  (2) 生成.class文件

javac Test1.java


  (3) 创建一个.mf文件,并编辑该文件
sudo touch Test1.mf


sudo vim Test1.mf


Test1.mf文件内容如图:



(4) 打.jar包

  
jar cfm test1.jar Test1.mf *.class


    执行完上述命令,文件夹中会多一个test1.jar文件

java -jar test1.jar


    测试你的jar是否成功,如果成功会有一个123.txt文档。

(5) 编写一个linux脚本执行第四步命令(写此脚本的目的是方便以后linux可以定时执行脚本)

    新建一个.sh文件
   
sudo touch test.sh


    编辑该test.sh文件  文件内容如图:

    

    
sudo chmod 777 test.sh

    
./test.sh


   上面就把linux执行java程序介绍完了,关于如何执行脚本可以参考我的另一篇博客http://jordy.easymorse.com/?p=59 本文用的的文件可以在附件中下载其中welcomelog.txt为原始文件,123.txt为程序生成文件。
  • 大小: 7.2 KB
  • 大小: 6.1 KB
1
1
分享到:
评论
4 楼 fenglongcen 2016-03-28  
java可以写测试脚本吗?
3 楼 energykey 2012-12-07  

yhjhoo 写道
好像没有一个外部的jar包,请教以下如何在linux设置classpath,可以像在windows下一样简单吗? 我试过,貌似不行,最后只有一个笨方法就是把一个个jar写进shell里面,让后执行,太麻烦了。


能不能直接加一个目录进去阿,还望赐教一下

#!/bin/sh
java -Djava.ext.dirs=lib -Djava.library.path=lib com.xiongmaoke.spider.Application $*


除了classes文件夹外,新建一个lib文件夹,把jar全放到lib下即可,把
com.xiongmaoke.spider.Application 改成你自己的入口类。
2 楼 wangxc 2010-06-08  
回复1楼,“好像没有一个外部的jar包”这句话不太明白你要表达什么意思,linux设置classpath与windows一样只有你的路径设置正确就可以了,我只写了操作一个jar文件的shell脚本,还没有写过一个脚本执行多个的jar包呢,不过我感觉你最后提到的想法应该是可以的,知道你的脚本编写正确,然脚本执行jar文件的顺序正确,就没什么问题了。

    我不是太明白你要加载很多jar的原因是什么?是你的程序要加入这些第三方jar包,还是想一个shell脚本同时执行多个脚本? 谢谢!

     希望您能表达的清楚一些,如果内容比较多,或者需要发送代码或者图片,也可以发到我的邮箱里。
1 楼 yhjhoo 2010-06-06  
好像没有一个外部的jar包,请教以下如何在linux设置classpath,可以像在windows下一样简单吗? 我试过,貌似不行,最后只有一个笨方法就是把一个个jar写进shell里面,让后执行,太麻烦了。


能不能直接加一个目录进去阿,还望赐教一下

相关推荐

Global site tag (gtag.js) - Google Analytics