package com.main.service;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.PrintWriter;
public class ReadData {
public static void main(String[] args) {
try {
testSaxReader("person");
System.out.println("---------");
testSaxReader("隸屬度");
} catch (Exception e) {
e.printStackTrace();
}
}
public static void testSaxReader(String item) throws DocumentException, FileNotFoundException {
SAXReader saxReader = new SAXReader();
System.out.println("工程路徑:"+System.getProperty("user.dir"));//問題所在
FileInputStream file = new FileInputStream("src/0625.xml");
Document doc = saxReader.read(file);
Element menu = doc.getRootElement();
System.out.println(menu.getName());
org.dom4j.Node person=menu.selectSingleNode("/Menu//Item[@Title='"+item+"']");
String nodeValue = person.getText();
System.out.println(nodeValue);
File fp=new File("./data/"+item+".txt");
PrintWriter pfp= new PrintWriter(fp);
pfp.print(nodeValue);
pfp.close();
}
}
代碼一有main方法,System.out.println("工程路徑:"+System.getProperty("user.dir"));
打印出來的結(jié)果是工程路徑:E:\workspace\outer\javaConnectR
,是我項(xiàng)目的路徑。
package com.main.service;
import java.awt.Graphics;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.HeadlessException;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Toolkit;
import java.awt.Transparency;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import org.rosuda.REngine.REXP;
import org.rosuda.REngine.Rserve.RConnection;
import com.main.util.Rservel;
public class Execute extends JFrame{
private static final long serialVersionUID=1L;
static Image img;
public REXP getRobj() throws Exception{
System.out.println("getRobj()");
RConnection c=Rservel.getRConnection();
c.eval("library(RColorBrewer)");
c.eval("H <- c(7,12,28,3,41)");
c.eval("colors<-brewer.pal(5,'Set1')");
c.parseAndEval(" barplot(H,rep(1,5),col=colors);dev.off()");
xp=c.parseAndEval("r=readBin('test.jpg','raw',3000*3000);unlink('test.jpg');r");
return xp;
}
public void createPlot(REXP xp, JFrame f,String path)throws Exception{
try {
Image image=Toolkit.getDefaultToolkit().createImage(xp.asBytes());
BufferedImage bufferedImage=toBufferedImage(image);
System.out.println("工程路徑:"+System.getProperty("user.dir"));
ImageIO.write(bufferedImage, "JPG", new File(path+"/outImg/98.jpg"));//
} catch (IOException e) {
e.printStackTrace();
}
}
public BufferedImage toBufferedImage(Image image) {
if (image instanceof BufferedImage) {
return (BufferedImage)image;
}
image = new ImageIcon(image).getImage();
BufferedImage bimage = null;
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
try {
int transparency = Transparency.OPAQUE;
GraphicsDevice gs = ge.getDefaultScreenDevice();
GraphicsConfiguration gc = gs.getDefaultConfiguration();
bimage = gc.createCompatibleImage(
image.getWidth(null), image.getHeight(null), transparency);
} catch (HeadlessException e) {
}
if (bimage == null) {
int type = BufferedImage.TYPE_INT_RGB;
bimage = new BufferedImage(image.getWidth(null), image.getHeight(null), type);
}
Graphics g = bimage.createGraphics();
g.drawImage(image, 0, 0, null);
g.dispose();
return bimage;
}
}
package com.main.web;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.rosuda.REngine.REXP;
import org.rosuda.REngine.Rserve.RConnection;
import org.rosuda.REngine.Rserve.RserveException;
import com.main.service.Execute;
/**
* Servlet implementation class ExecuteR
*/
@WebServlet("/ExecuteR")
public class ExecuteR extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ExecuteR() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String RSentences=request.getParameter("data");//這個(gè)例子必須到頁(yè)面點(diǎn)擊
//System.out.println(filePath);
String path=getServletContext().getRealPath("/");
System.out.println("servlet路徑:"+path);
Execute wc=new Execute();
REXP xp;
try {
xp = wc.getRobj();
wc.createPlot(xp,wc,path)
} catch (Exception e) {
e.printStackTrace();
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
代碼二:沒有main方法,是一個(gè)java類,通過servlet調(diào)用,System.out.println("工程路徑:"+System.getProperty("user.dir"));
打印出來結(jié)果是工程路徑:E:\BE\eclipse\eclipse
,是我安裝eclipse的路徑,不是項(xiàng)目路徑;代碼String path=getServletContext().getRealPath("/");
打印出來結(jié)果是:servlet路徑:E:\workspace\eclipse_jee_mars2\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\javaConnectR\
1.請(qǐng)問為什么會(huì)有這樣的區(qū)別??
2.我希望代碼二里的ImageIO.write(bufferedImage, "JPG", new File(path+"/outImg/98.jpg"));
new File里的路徑是和代碼一System.getProperty("user.dir"));
打印出來的路徑E:\workspace\outer\javaConnectR
一致,為項(xiàng)目路徑。請(qǐng)問該怎么解決??
user.dir
指向的是你啟動(dòng) JVM
的地方,你可以看看這里
代碼一是你從工程路徑下啟動(dòng)的,但是代碼二你的 Servlet
是被容器 (Tomcat
等等)加載進(jìn) JVM
的,而此時(shí) user.dir
指的是這些容器的路徑,這方面你需要了解一下容器是怎樣運(yùn)行的。
你在 E:\workspace\outer\javaConnectR
寫代碼,這是開發(fā)環(huán)境,但是當(dāng)你打包成 .war
時(shí),它會(huì)被容器解壓到一個(gè)目錄,比如你代碼二中輸出的 E:\workspace\...\wtpwebapps\javaConnectR\
,此時(shí)它無論如何也不可能按你所想去讀到開發(fā)時(shí)的路徑,因?yàn)榇a二實(shí)際運(yùn)行的時(shí)候文件已經(jīng)不在你開發(fā)的路徑上了。
我就用通俗的話來說一下吧:
System.out.println("工程路徑:"+System.getProperty("user.dir"));
這段代碼由JVM執(zhí)行,因此輸出的是類路徑,getServletContext().getRealPath("/");
是由Tomcat執(zhí)行,在Eclipse下配置Tomcat,Tomcat會(huì)將代碼默認(rèn)輸出到另外的文件夾中(當(dāng)然了,該路徑是可以配置的)。它倆輸出的結(jié)果不同主要是因?yàn)閳?zhí)行的主體不一致,JVM和Tocmat
devProjectPath=http://localhost:8080/xxx
,devProjectPath=http://localhost:8080/xxx
,productionProjectPath=http://www.xxxx.com
水平有限,如果有錯(cuò)的地方請(qǐng)指出
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國(guó)IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國(guó)家
北大青鳥中博軟件學(xué)院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學(xué)院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團(tuán)創(chuàng)建于1999年,經(jīng)過二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機(jī)構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團(tuán),成為集合面授教學(xué)培訓(xùn)、網(wǎng)
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國(guó)一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國(guó)成功上市,融資1
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫(kù),具有快速界面開發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁(yè)制作和網(wǎng)頁(yè)游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國(guó)Software AG 技術(shù)顧問,美國(guó)Dachieve 系統(tǒng)架構(gòu)師,美國(guó)AngelEngineers Inc. 系統(tǒng)架構(gòu)師。