❶ 求修正这个小小的java程序, 在Unix 系统上的
这段代码处理的比较全面一些.希望对你有帮助.
功能,输入两个double ,验证输入参数,满足条件则执行,不满足条件则提示用户参数输入错误,并等待用户重新输入参数
如果参数类型不为double则提示用户重新输入.直到两个参数全部输入,开始执行,或者输入-1退出程序!
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.kyj.util;
import java.util.Scanner;
/**
*
* @author wgw
*/
public class BMI {
public static void main(String[] args) {
// args = new String[]{"1.1"};
args = checkNumber(args);
double weight = Double.parseDouble(args[0]);
double height = Double.parseDouble(args[1]);
double bmi = ((weight) / (height * height));
if (bmi < 18.5) {
System.out.println("underweight");
} else if (bmi <= 25.0) {
System.out.println("underweight");
} else if (bmi < 25.0) {
System.out.println("overweight");
} else if (bmi <= 30) {
System.out.println("overweight");
} else if (bmi > 30) {
System.out.println("obese");
}
}
public static String[] checkNumber(String[] args) {
if (args.length == 2) {
return args;
} else {
System.out.println("Wrong input. Usage: java BMI mass(kg) height(m)");
Scanner scanner = new Scanner(System.in);
args = new String[2];
for (;;) {
try {
System.out.println("please input weight:");
double weight = scanner.nextDouble();
System.out.println("please input height:");
double height = scanner.nextDouble();
args[0] = weight + "";
args[1] = height + "";
if(-1==weight || -1==height){
System.out.println("exit!");
System.exit(1);
}
break;
} catch (Exception e) {
// e.printStackTrace();
System.out.println("data type error !!! please input double type\n exit please input -1");
continue;
}
}
return args;
}
}
}
❷ dos或unix下运行java程序
1.
javac是编译java文件,编译后的java文件,是创建了包名的一个文件路径,比如直接执行javac A.java,那么会在当前目录下创建如下class文件:a/b/A.class
2.
2当执行java命令的时候,如果还在当前目录下执行java命令就会报错,因为在当前目录下,并不能找到A.class。
3.
当越包引用的时候,如题。那么在执行javac A.java到时候,编译器会寻找a/c/B.class文件,如果没有编译B.java文件,那么就不会存在a/c/B.class文件,就会报错了。所以在执行javac A.java的时候,要首先编译该类调用的其它包中的所有文件。
4.
sun还有一个编译工具叫Ant,这个东西可以比较轻易的解决这个问题,具体Ant的使用就自己查资料吧。事实上各种的编译软件都是使用Ant编译的。除非他自己写一个类似功能的软件。
❸ 如何用java实现修改unix下一些用户的口令
您好,我来为您解答:
使用encrypt自己些修改password的程序.
或者可以修改系统passwd成可以接收pass参数.
对于UNIX用JAVA操作,十有八九就是错,不说Runtime.getRuntime ().exec 是否能和在直接输命令等价(我认为是不等价的,加多了参数,就根本不认,原因不知)==>LZ还是将命令写到SHELL里面。
拿JAVA直接调用SHELL
如果我的回答没能帮助您,请继续追问。
❹ 怎么在java中执行UNIX脚本代码
public static void parseLog(ArrayList<String logAddress,
ArrayList<String exceWords, HashMap<String,String excelevel,String beginTime,int start,int end,String fmt) throws IOException,
InterruptedException {
Date date = null;
long dbDate = 0;
dbDate = DBLogExce.getMaxDate();
for (int i = 0; i < logAddress.size(); i++) {//遍历URLString url = logAddress.get(i);
//主要运用java中的Process类,调用exc();方法,执行命令,的到输入流,解读文件,
Process proc = null;try {proc = Runtime.getRuntime().exec(
"grep " + "'" + beginTime + "' " + url);
} catch (IOException e) {
e.printStackTrace();}InputStream stderr = proc.getErrorStream();
InputStreamReader isr = new InputStreamReader(stderr);
BufferedReader br = new BufferedReader(isr);
String line = null;
while ((line = br.readLine()) != null)
System.out.println("<OUT");
for(int j=0;j<exceWords.size();j++){
//判断当天的日志是否包含异常关键字
int index = line.indexOf(exceWords.get(j));
if(index!=-1){
String exceLevel = excelevel.get(exceWords.get(j));
//解析异常得到时间
line = line.substring(start, end);
date = ToolUtils.parseToDate(line, fmt);
long l = date.getTime();
//判断大于数据库最大时间,插库
❺ 关于java和unix
学java必然有一些先行课,和先行知识
包括基本的逻辑运算,计算机基础原理比如冯诺依曼体系二进制之类内容,然后就是学习java的基本语法,这期间不需要使用集成开发环境,用记事本或者editplus就行,教材用约薄的越好,一定要java基础,语法都通了,就可以开始做一些能用的东西了,这个时候就可以用eclipse了(顺便说一下jdk不是开放工具,是一组java的基础类和编译调试程序,虽然名字叫jdk,java develope kit但是实际是堆类,跟.net framwork一样),有了eclipse(一般要搭配Myeclipse插件)就可以开发一些复杂的桌面应用了,这个时候要做的就是熟悉面向对象的思想,然后学习html,JavaScript,CSS这些网页基础知识
这些都准备好了就可以开始做传说中的J2EE程序了,所谓J2EE不是一个什么规范,他是jdk的另外一个版本,一般你下载的jdk叫做J2se就是java 2 standard edition,而j2ee是java 2 Enterprise edition,J2EE的develope kit用Myeclipse就行,里面有web工程都不用你操心了,当你开发j2ee工程时候需要用到一个容器来解析j2ee(就如同j2se的套件里面有编译工具一样)这个容器最方便的就是tomcat了
然后是UNIX,你根本不用学,在xp上开发好到unix就可以,跨平台,只要unix上装了unix的java虚拟机就能直接用了,如果要学的推荐使用VMware这个东西,可以在xp上虚拟出unix,linux,甚至是mac,而且最新版的VMware据说可以同时开4,5个虚拟操作系统都不会死机
推荐书,按我说的顺序先看基础,任何出版社都ok,然后看比基础后一些的(如果不想做桌面应用跳过也可以),然后看j2ee教程,最好有案例那种,哪本都可以,讲的都挺详细,然后专项看struts,Hibernate,spring的书
解释一下上面说那些词(其实你踏实下来看书都能找到答案,书里都会说)mvc是sun公司发明的一种编程的方式,就是做软件时候按照3曾来分类,m是modal模型层主要负责描述一些实例的属性并且留出对应的公共set,get方法,v是view视图层,用来给用户看的,c是控制层,控制一些方法去对m曾里的实例进行增删改查等操作
ant是一套部署工具,一般你调试以后要把工程部署一下,如果每次都手工做就太笨了,所以发明了ant
ejb是sun公司出的一套框架Enterprise java bean,到3.0以后才有人用,而且功能和ssh效果差不多,不多说了
“ssh=struts,hibernate,spring, 三个框架”引用别人说的,这个正确
struts是一个mvc框架,主要用jsp做视图层,struts的action类做控制层,struts的formbean做模型层(不过自己也要建立模型层方便和数据库交互)
hibernate是一套数据库持久化框架模型,用法也很简单,在Myeclipse里都集成了,没有特殊需求都用IDE生成就可以了,不过真实项目里生成好的要自己改一些地方才能用
spring是一套面向刻面和反转控制的框架,至于这两个是什么英文叫AOP和Ioc不赘述了,网上搜搜很多,而且看spring的书第一张一定会说这个
log4j是一套记录日志的java组件,用不用都行,struts里都集成了
cvs是做版本控制的一个工具Myeclipse里集成了
junit是一套用来做单元测试的工具类,Myeclipse里也集成比较复杂,不过以后到公司了,公司都会安排你来做测试,到时候他们怎么要求怎么做,中国的破公司很多都不做测试,跑通了就ok了
❻ unix下如何启动和关闭一个java程序
用Runtime类可以执行DOS命令来执行一个进程,如下就是打开记事本:
try {
Runtime runtime = Runtime.getRuntime();
runtime.exec("notepad.exe");
} catch (IOException e) {
e.printStackTrace();
}
Thread是线程,不是进程,楼主可以去查查线程和进程的区别。
运行main函数时,就启动了一个java.exe进程,对应的dos命令就是java xxx
楼主可以用Runtime 来执行,java xxx,只要路径正确,就会启动另一个java进程。
❼ java程序中调用带通配符*的unix系统命令
由于在linux环境下,我们一般使用bash shell调用这些命令, 而其中的一些符号 诸如:
*, ?, >, < , | 这样的符号是通过/bin/bash -c来做解释后再传递给 所调用的命令
/bin/bash -c 这个参数已经作为默认命令,在系统启动时加载到运行环境中,所以我们敲以上命令的时候可以省略
但对于java的Process来说,不会识别这些符号,因此我们必须强制调用/bin/bash -c来帮我们做符号解释:
http://tuhaitao.iteye.com/blog/1047820
❽ 如何使用shell在unix下执行java 程序
你是在linux环境下运行吧!
如果你是要编译执行单个java文件,当然用javac,和java,如果是在一个shell脚本中妄图调用java程序,假如这个程序是个jar包,也许可以这么干:在你能保证的路径下放入可执行的jar包,然后在脚本中写到:java -jar jar包路径+jar包名称.jar,不信可以在终端使用该命令!
❾ 在unix下用java程序获取另外一台机器(windows)上的文件或者调用某一个可执行文件(exe或者bat)
windows那里写个servlet,用于读取某个文件,并向response输出这个文件
unix那台用http(河蟹)client发起来个请求,即访问这个servlet,得到输入流之后开始保存文件
即一个输出,一个输入
就可以得到你想要的文件了
也可以用java socket不过这个就比较麻烦