简单生活 发表于 2015-1-18 11:44:09

JAVA编程:用Java程序猎取相对路径

Java的桌面程序开发在java程序员里通常叫swing开发,主要用的swing包里的类开发的,也就是通常说的c/s架构开发程序前一段做个程序,碰到了如许一个成绩,想使用绝对路径删失落一个文件(实践存在的),总是删不失落.真是急人呀,最初让我费了好鼎力气才算把它办理失落,成绩不防跟人人说说,万一碰到如许的成绩,就不必再费力了!

情形是如许的:我的Tomcat装在了c盘,而我的假造目次设在了E:/work下,我在E:/work/test/image下有个图片,test.gif我想经由过程程序删失落它,但他的相对路径不断定(为了思索到程序今后的移植,相对路径是不断定的)。

假定del.jsp文件在e:/work/test下,用上面的程序仿佛能够删失落:

<!--原始的del.jsp源文件-->
<%@pagecontentType="text/html;charset=GBK"errorPage=""%>
<%request.setCharacterEncoding("GBK");%>
<%@pagelanguage="java"import="java.sql.*"import="java.util.*"import="java.text.*"import="java.io.*"%>
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=GBK">
<title>删除乐成页面</title>
</head>
<body>
Filef=newFile("/image/",test.gif);
booleana=f.delete();
out.print("a="+a);
</body>
</html>

但现实上不可,你会发明a=false;

这就必要猎取其相对路径,我们用java程序来做一个专门来猎取相对路径的javaBean(path_test.java)就能够了。

path_test.java的代码以下:
packagepathtest;
importjava.io.*;
importjavax.servlet.*;
importjavax.servlet.jsp.PageContext;//导进PageContext类,不要忘了
publicclasspath_test
{

protectedServletContextm_application;
privatebooleanm_denyPhysicalPath;
publicpath_test()
{

}
publicfinalvoidinitialize(PageContextpageContext)
throwsServletException
{
m_application=pageContext.getServletContext();

}

publicStringgetPhysicalPath(StringfilePathName,intoption)
throwsIOException
{
Stringpath=newString();
StringfileName=newString();
StringfileSeparator=newString();
booleanisPhysical=false;
fileSeparator=System.getProperty("file.separator");
if(filePathName==null)
thrownewIllegalArgumentException("Thereisnospecifieddestinationfile(1140).");
if(filePathName.equals(""))
thrownewIllegalArgumentException("Thereisnospecifieddestinationfile(1140).");
if(filePathName.lastIndexOf("")>=0)
{
path=filePathName.substring(0,filePathName.lastIndexOf(""));
fileName=filePathName.substring(filePathName.lastIndexOf("")+1);
}
if(filePathName.lastIndexOf("/")>=0)
{
path=filePathName.substring(0,filePathName.lastIndexOf("/"));
fileName=filePathName.substring(filePathName.lastIndexOf("/")+1);
}
path=path.length()!=0?path:"/";
java.io.FilephysicalPath=newjava.io.File(path);
if(physicalPath.exists())
isPhysical=true;
if(option==0)
{
if(isVirtual(path))
{
path=m_application.getRealPath(path);
if(path.endsWith(fileSeparator))
path=path+fileName;
else
path=String.valueOf((newStringBuffer(String.valueOf(path))).append(fileSeparator).append(fileName));
returnpath;
}
if(isPhysical)
{
if(m_denyPhysicalPath)
thrownewIllegalArgumentException("Physicalpathisdenied(1125).");
else
returnfilePathName;
}else
{
thrownewIllegalArgumentException("Thispathdoesnotexist(1135).");
}
}
if(option==1)
{
if(isVirtual(path))
{
path=m_application.getRealPath(path);
if(path.endsWith(fileSeparator))
path=path+fileName;
else
path=String.valueOf((newStringBuffer(String.valueOf(path))).append(fileSeparator).append(fileName));
returnpath;
}
if(isPhysical)
thrownewIllegalArgumentException("Thepathisnotavirtualpath.");
else
thrownewIllegalArgumentException("Thispathdoesnotexist(1135).");
}
if(option==2)
{
if(isPhysical)
if(m_denyPhysicalPath)
thrownewIllegalArgumentException("Physicalpathisdenied(1125).");
else
returnfilePathName;
if(isVirtual(path))
thrownewIllegalArgumentException("Thepathisnotaphysicalpath.");
else
thrownewIllegalArgumentException("Thispathdoesnotexist(1135).");
}

else
{
returnnull;
}

}
privatebooleanisVirtual(StringpathName)//判别是不是是假造路径
{
if(m_application.getRealPath(pathName)!=null)
{
java.io.FilevirtualFile=newjava.io.File(m_application.getRealPath(pathName));
returnvirtualFile.exists();
}

else
{
returnfalse;
}
}

}

对path_test.java编译后,失掉包pathtest,内里有path_test.class类,

把全部包放到假造目次的classes下,然后再把del.jsp文件改成以下程序,统统都OK了!

<!--改后的del.jsp的源文件-->
<%@pagecontentType="text/html;charset=GBK"errorPage=""%>
<%request.setCharacterEncoding("GBK");%>
<%@pagelanguage="java"import="java.sql.*"import="java.util.*"import="java.text.*"import="java.io.*"%>
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=GBK">
<title>删除乐成页面</title>
</head>
<body>
<jsp:useBeanid="pathtest"scope="page"class="pathtest.path_test"/>
pathtest.initialize(pageContext);//初始化
Stringdir1=pathtest.getPhysicalPath("/test/image/",0);//传参数
out.print(dir1);//输入的是相对路径
Filefile=newFile(dir1,"test.gif");//天生文件对象
booleana=file.delete();
out.print("a="+a);
</body">
</html>

此时a=true;暗示删除乐成!

到此为止,成绩全体弄定。


到时我们不用学struts,不用学spring,不用学Hibernate,只要能把jsf学会了,完全可以替代所有的框架,包括AJAX,都知道AJAX并不是新技术,虽说我没深入学习jsf但我认为jsf应该已经能通过其它技术替代AJAX,实现无缝刷新。

若相依 发表于 2015-1-21 13:29:37

任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言

爱飞 发表于 2015-1-30 19:09:35

是一种为 Internet发展的计算机语言

小妖女 发表于 2015-2-6 15:08:34

Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。

老尸 发表于 2015-2-13 14:45:43

如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。

透明 发表于 2015-2-14 15:16:52

你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?

柔情似水 发表于 2015-2-18 19:02:59

接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。

飘灵儿 发表于 2015-2-26 21:57:18

http://www.jdon.com/去下载,或到同济技术论坛的服务器ftp://nro.shtdu.edu.cn去下,安装上有什么问题,可以到论坛上去提问。

再现理想 发表于 2015-3-11 11:05:58

另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。

admin 发表于 2015-3-18 07:27:30

你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?

变相怪杰 发表于 2015-3-25 13:09:02

你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。

仓酷云 发表于 2015-4-7 12:42:04

Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)

小魔女 发表于 2015-4-17 02:40:44

应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展

不帅 发表于 2015-4-22 10:08:45

接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。

海妖 发表于 2015-4-24 07:01:31

让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。

因胸联盟 发表于 2015-5-5 15:44:33

接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。

若天明 发表于 2015-6-18 22:35:31

另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。

兰色精灵 发表于 2015-6-21 09:22:00

是一种突破用户端机器环境和CPU

只想知道 发表于 2015-6-24 02:42:00

Java 编程语言的风格十分接近C、C++语言。

再见西城 发表于 2015-6-28 21:51:13

是一种将安全性(Security)列为第一优先考虑的语言
页: [1]
查看完整版本: JAVA编程:用Java程序猎取相对路径