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"));打印出來的結果是工程路徑:E:\workspace\outer\javaConnectR,是我項目的路徑。
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");//這個例子必須到頁面點擊
//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方法,是一個java類,通過servlet調用,System.out.println("工程路徑:"+System.getProperty("user.dir"));打印出來結果是工程路徑:E:\BE\eclipse\eclipse,是我安裝eclipse的路徑,不是項目路徑;代碼String path=getServletContext().getRealPath("/");打印出來結果是:servlet路徑:E:\workspace\eclipse_jee_mars2\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\javaConnectR\
1.請問為什么會有這樣的區(qū)別??
2.我希望代碼二里的ImageIO.write(bufferedImage, "JPG", new File(path+"/outImg/98.jpg"));new File里的路徑是和代碼一System.getProperty("user.dir"));打印出來的路徑E:\workspace\outer\javaConnectR一致,為項目路徑。請問該怎么解決??
user.dir 指向的是你啟動 JVM 的地方,你可以看看這里
代碼一是你從工程路徑下啟動的,但是代碼二你的 Servlet 是被容器 (Tomcat等等)加載進 JVM 的,而此時 user.dir 指的是這些容器的路徑,這方面你需要了解一下容器是怎樣運行的。
你在 E:\workspace\outer\javaConnectR 寫代碼,這是開發(fā)環(huán)境,但是當你打包成 .war 時,它會被容器解壓到一個目錄,比如你代碼二中輸出的 E:\workspace\...\wtpwebapps\javaConnectR\,此時它無論如何也不可能按你所想去讀到開發(fā)時的路徑,因為代碼二實際運行的時候文件已經不在你開發(fā)的路徑上了。
我就用通俗的話來說一下吧:
System.out.println("工程路徑:"+System.getProperty("user.dir"));這段代碼由JVM執(zhí)行,因此輸出的是類路徑,getServletContext().getRealPath("/");是由Tomcat執(zhí)行,在Eclipse下配置Tomcat,Tomcat會將代碼默認輸出到另外的文件夾中(當然了,該路徑是可以配置的)。它倆輸出的結果不同主要是因為執(zhí)行的主體不一致,JVM和Tocmat
devProjectPath=http://localhost:8080/xxx,devProjectPath=http://localhost:8080/xxx,productionProjectPath=http://www.xxxx.com
水平有限,如果有錯的地方請指出
北大青鳥APTECH成立于1999年。依托北京大學優(yōu)質雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數據專業(yè)的國家
達內教育集團成立于2002年,是一家由留學海歸創(chuàng)辦的高端職業(yè)教育培訓機構,是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學校辦產業(yè)為響應國家深化產教融合/校企合作的政策,積極推進“中國制造2025”,實現中華民族偉大復興的升級產業(yè)鏈。利用北京大學優(yōu)質教育資源及背
博為峰,中國職業(yè)人才培訓領域的先行者
曾工作于聯想擔任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經理從事移動互聯網管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經理職務負責iOS教學及管理工作。
浪潮集團項目經理。精通Java與.NET 技術, 熟練的跨平臺面向對象開發(fā)經驗,技術功底深厚。 授課風格 授課風格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網頁制作和網頁游戲開發(fā)。
具有10 年的Java 企業(yè)應用開發(fā)經驗。曾經歷任德國Software AG 技術顧問,美國Dachieve 系統(tǒng)架構師,美國AngelEngineers Inc. 系統(tǒng)架構師。