Java编程知识点总结[1]

[color=darkred][b]1. 用java程序判断一个.java文件是否能编译通过.[/b][/color]
com.sun.tools.javac.Main javac  =  new com.sun.tools.javac.Main(); 
String[] args = new String[] {"-d","D:/", "fileName" };
int compileStatus = javac.compile(args);
注释:[list]
[*]param1:用编译的文件的目录,"-d"表示当前目录.
[*]param2:生成的编译文件的目录,默认生成my/test/fileName.class的目录结构.
[*]param3:文件名称.
[/list] 在Sun的JDK1.2及后续版本中,JDK安装路径的/lib路径下包含了一个tools.jar文件,这个类库包含了一个完整的编译器包。com.sun.tools.javac.Main是编译器的主类入口,如果已经熟悉了javac编译器命令行的使用方法,很容易理解这个类的使用方法。方法 compile(String[] p)执行编译动作,参数p是一个String数组,用来存放javac命令的参数
选项,编译后的状态返回一个Int值,其对应值参考如下表所示:
  表 状态参数与对应值
  EXIT_OK 0
  EXIT_ERROR 1
  EXIT_CMDERR 2
  EXIT_SYSERR 3
  EXIT_ABNORMAL 4

[color=darkred][b]2. dos命令编译和运行java类[/b][/color]
[quote]1.如果要编译java类,使用:javac HelloWorld.java
2.如果要运行java类,使用:java HelloWorld
3.如果类里面有指定包路径,编译使用:javac HelloWorld.java -d .\ ,在当前路径下产生包和类
4.如果类里面有指定包路径,运行使用:java com.XXX.HelloWorld,
5.如果类中引用了其他包中的类,使用:将要调用的包解压到本地路径,然后javacHelloWorld.java,运行即可。
6.如果类中引用了其他包中的类,使用:javac HelloWorld.java -d .\ -classpath D:\test\ojdbc14.jar
7.如果类中继承了其它类,使用:javac -classpath P1包的父目录 P2.java(其中P2继承于P1)
8.附:相关指令帮助:
D:\test>javac com.hc360.HelloWorld.java -d
javac: -d 需要参数
用法:javac <选项> <源文件>
其中,可能的选项包括:
-g 生成所有调试信息
-g:none 不生成任何调试信息
-g:{lines,vars,source} 只生成某些调试信息
-nowarn 不生成任何警告
-verbose 输出有关编译器正在执行的操作的消息
-deprecation 输出使用已过时的 API 的源位置
-classpath <路径> 指定查找用户类文件的位置
-cp <路径> 指定查找用户类文件的位置
-sourcepath <路径> 指定查找输入源文件的位置
-bootclasspath <路径> 覆盖引导类文件的位置
-extdirs <目录> 覆盖安装的扩展目录的位置
-endorseddirs <目录> 覆盖签名的标准路径的位置
-d <目录> 指定存放生成的类文件的位置
-encoding <编码> 指定源文件使用的字符编码
-source <版本> 提供与指定版本的源兼容性
-target <版本> 生成特定 VM 版本的类文件
-version 版本信息
-help 输出标准选项的提要
-X 输出非标准选项的提要
-J<标志> 直接将 <标志> 传递给运行时系统[/quote]

[color=darkred][b]3. Runtime类的使用方法小结(runtime是单例类,不同的对象 指向同个内容。).[/b][/color]
a. 使用java程序执行某些windows命令
Runtime rt= Runtime.getRuntime();
Process p=null;
rt.exec("notepad.exe"); //运行记事本程序
rt.exec("C:\\Program Files\\iexplore.exe"); //运行一个exe程序
rt.exec("D://test.bat"); //bat内容:javac D:\StringAdd.java
rt.exec("shutdown -r"); //重启
rt.exec("shutdown -l"); //注销
rt.exec("shutdown -s"); //注销
b. 上传一个.java文件,在指定的环境中跑junit test,返回执行结果(生成结果的文件路径)
public static String checkCodeResult(String testSuiteDriver,
String filePath, String username) throws Exception {
com.sun.tools.javac.Main javac=new com.sun.tools.javac.Main();
String[] argstt = new String[] {"-d",ServletActionContext.getServletContext().getRealPath("") + File.separator + "docs"+ File.separator, filePath};
int compileStatus = javac.compile(argstt);
// 判断是否编译通过
if(compileStatus==0)
{
String jUnitPath = System.getenv("JUNITPATH");
if (jUnitPath == null || jUnitPath.isEmpty() == true
|| jUnitPath.equals("")) {
jUnitPath = System.getenv("JAVA_HOME");
}
File workDir = new File(jUnitPath);
Runtime rt = Runtime.getRuntime();
username = username + new Date().getTime();
Process proc = rt.exec(testSuiteDriver + " " + filePath + " "
+ username, null, workDir);
File file = new File(jUnitPath + "\\logs.txt");
if (file.exists()) {
file.delete();
}
InputStream stdin = proc.getInputStream();
InputStreamReader isr = new InputStreamReader(stdin);
BufferedReader br = new BufferedReader(isr);
FileOutputStream fout = new FileOutputStream(file);
DataOutputStream out = new DataOutputStream(fout);
StringBuffer logsBuffer = new StringBuffer();
String line = null;
while ((line = br.readLine()) != null) {
out.writeBytes(line + "\r\n");
logsBuffer.append(line + "\r\n");
}
out.close();
fout.close();

return jUnitPath + "\\" + username + "_result.txt";
}
return "";
}
注意事项:
1. 环境的配置
(JUnitPath:D:\dev\kit\jdk\lib; classpath:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\junit-4.8.1.jar)
2. 执行的文件testStringAdd.cmd
3. 上传的StringAdd.java文件
4. 参数的作用、执行命令的环境jdk/lib/
5. 相关资料(附件或mark_qi@163.com中)


[color=darkred][b]4. 创建和删除文件夹(folder)[/b][/color]
 1. 新建、删除folder
File myFilePath = new File(filePath);
if (!myFilePath.exists())
{
myFilePath.mkdir();
myFilePath .delete();
}
2. 如果folder里有子文件,运用递归方法来删除欲删除的文件夹下的所有子文件夹以及文件。
public void removeFile(String path) {
this.removeFile(new File(path));
}
public void removeFile(File path) {
if (path.isDirectory())
{
File[] child = path.listFiles();
if (child != null && child.length != 0)
{
for (int i = 0; i < child.length; i++)
{
removeFile(child[i]);
child[i].delete();
}
}
}
path.delete();
}


[color=darkred][b]5 struts2上传单个文件 [/b][/color]
  Jsp:
<form name="coursewarefrm" action="courseware!add.ptm" method="post" enctype ="multipart/form-data" >
<s:file name ="myFile" id="coursefile" label ="定制课件包" />
<ul class="button">
<li><a href="javascript:btnsave();">保存</a></li>
</ul>
</form>
Action:
private File myFile;
private String myFileContentType;
private String myFileFileName;
private static final int BUFFER_SIZE = 16 * 1024 ;

private static void copy(File src, File dst) {
try {
InputStream in = null;
OutputStream out = null;
try {
in = new BufferedInputStream(new FileInputStream(src), BUFFER_SIZE);
out = new BufferedOutputStream(new FileOutputStream(dst), BUFFER_SIZE);
byte[] buffer = new byte[BUFFER_SIZE];
while (in.read(buffer) > 0) {
out.write(buffer);
}
} finally {
if (null != in) {
in.close();
}
if (null != out) {
out.close();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}

private static String getExtention(String fileName) {
int pos = fileName.lastIndexOf(".");
return fileName.substring(pos);
}
// 自动调用该方法把文件copy到服务器,我们只需继续请求方法即可.
private String saveFile()
{
String imageFileName = new Date().getTime() + getExtention(myFileFileName); // 上传文件重命名
File imageFile = new File(ServletActionContext.getServletContext().getRealPath( "/docs/" ) + "/" +

imageFileName); // 获取服务器路径并新建 一个新的file
copy(myFile, imageFile); // 把上传的文件以数据流的形式,复制给新的file
try {
// 读取文件,可以执行service操作
if(excelData == null)
{
excelData = new ArrayList<TemplateMetaData>();
}
excelData = ExcelParse.readHSFWorkbook(imageFile.getAbsolutePath());
templateProjectService.saveTemplete(excelData);
} catch (IOException e) {
e.printStackTrace();
}
catch (MultipleResultException e) {
e.printStackTrace();
}
return SUCCESS;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值