eclipse java工程目錄_轉載:Eclipse下的java工程目錄

對新手來講,一個Java工程內部的多個文件夾經常會讓大家困惑。更可惡的是莫名其妙的路徑問題,在Eclipse編寫Java程序中,出現頻率最高的錯誤很可能就是路徑問題。

這些問題原因其實都是一個,就是關于Java工程內的文件結構理解不清,雖然我也不是老手,但有一些經驗,拿來和大家分享:

eclipse的基本工程目錄叫做workspace,每個運行時的eclipse實例只能對應一個workspace,也就是說,workspace是當前工作的根目錄。我們在workspace中可以隨意創建各種java相關的工程,普通的java應用,java web應用,web service應用等,我們僅拿普通的java application來說明。

通常我們創建一個java application工程,會創建一個工程目錄,假設工程名稱為:TestProject,那么在當前的workspace里講創建一個目錄名為TestProject,同時我們選擇src作為源碼文件夾,bin作為輸出路徑,這樣就構成了一個基本的java application工程。,在workspace中存在如下文件夾:

+workspace

+TestProject

-src

-bin

這個時候我們創建的代碼將寫入src目錄,輸出的class文件將存在于bin目錄。

(對于新手來說,區分src目錄和bin目錄很重要,通常情況下,src目錄只存放源代碼,而所有工程相關的其他輸出文件都會存放在bin目錄下,最為重 要的是:用Eclipse進行打包時根目錄就是bin,用jar包調用工程的時候默認的路徑也要以bin為準,到bin的層級數目就是最終的數目,因此可 以說bin是最為重要的目錄,而不是src)

這時候我們在src目錄下創建一個類,就叫做TestClass,里面有一個main方法如下:

Java代碼

public static voidmain(String[] args){

System.out.println(new File("test.txt").exist());

}

同時在src目錄下創建一個空的文件test.txt。什么都不要做,保存工程,打開資源管理器,我們來查看workspace/TestProject/bin目錄,下面會存在兩個文件:TestClass.class和test.txt。

此時我們設想,程序的內容就是檢查test.txt文件是否存在,按照現在的目錄規劃,我們認為,在控制臺上將打出“true”,ok,我們回到eclipse中,運行TestClass這個類。控制臺輸出了:false!

為什么我們得到了并非我們預期的結果呢?先別著急,我們打開windows的命令行界面(或者linux的shell都ok),將目錄切換到workspace/TestProject/bin目錄下,執行如下命令java TestClass,看看出現什么結果?true!對,就是true。

為啥同樣的程序會有不同的結果呢?這個答案很簡單,就出在java.exe本身的一個參數-cp(classpath)上!

eclipse默認的classpath包括三個部分:

1、jdk的bin目錄;

2、工程引用的所有其他jar包路徑

3、工程根路徑(對,不是bin路徑)

那么我們就可以理解來,在classpath的根路徑中并不存在這個test.txt文件,用相對路徑描述,這個文件實際存在于src/test.txt 和bin/test.txt。也就是說,classpath默認的路徑是workspace-testproject下,而不是workspace- testproject-bin下,所以才找不到這個文件。這是經常出現的問題!

那么這個時候就有疑問了,如果我們打包發布工程,是不是jar包中會把testproject根目錄作為包中的根目錄呢?幸運的是,eclipse考慮好 了這個問題。通過eclipse的導出jar能力,bin目錄會作為jar的根目錄,而不是bin的上層的工程目錄,這樣類的包路徑就是正確的,同時,工 程目錄下的資源文件、配置文件等也被拷貝到這里,也就是相當于把工程目錄下的這些文件拷貝到來bin目錄后再打包,這樣文件的相對路徑也就符合默認的 classpath了。

從上面可以總結出來:Eclipse直接運行時,是以工程的根目錄作為基準目錄。而打包成jar運行時,則是以bin目錄作為基準目錄。這兩者相差了一級目錄,如果理解的不好,可能會導致錯誤。希望大家注意!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/370504.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/370504.shtml
英文地址,請注明出處:http://en.pswp.cn/news/370504.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

作為JBoss AS 7模塊運行Drools 5.4.0 Final

Drools 5引入了業務邏輯集成平臺,該平臺為規則,工作流和事件處理提供了統一的集成平臺。 它是從頭開始設計的,因此每個方面都是一流的公民,毫不妥協。 Drools 5已分為4個主要子項目: Drools Guvnor(BRMS …

postgres 支持的線程數_線程池被打滿了怎么處理呢,你是否真的了解線程池?

0、前言線程池,顧名思義就是線程的池子,在每次需要取線程去執行任務的時候,沒必要每次都創建新線程執行,線程池就是起著維護線程的作用,當有任務的時候就取出一個線程執行,如果任務執行完成則把線程放回到池…

[樹形DP]沒有上司的舞會

題目鏈接 思考 首先本題中的關系是一種樹形結構,而且符號最優子結構和無后效性,所以可以進行記憶化搜索。 那么首先要在這顆樹中選出一個點作為根節點,按照習慣我們將沒有父節點的點作為根節點。 接下來要思考的是 狀態: dp[i][0…

網頁自適應

1.viewport標簽 基本語法&#xff1a; <meta name”viewport” content”widthdevice-width,initial-scale1” /> 上面這行代碼的意思是&#xff0c;面積的100%&#xff0c;網頁寬度默認等于屏幕寬度&#xff08;widthdevice-width&#xff09;, 原始縮放比例&#x…

java 大數處理

頭文件&#xff1a;import java.util.*;import java.math.*; Scanner cin Scanner (System.in);//讀入while(cin.hasNext())//等價于!EOFncin.nextInt();//讀入一個int型的數ncin.nextBigInteger();//讀入一個大整數 輸出&#xff1a; System.out.print(n);//打印nSystem.out.…

java provider_Java SPI(Service Provider Interface)

//ServiceLoader實現了Iterable接口&#xff0c;可以遍歷所有的服務實現者public final class ServiceLoaderimplements Iterable{//查找配置文件的目錄private static final String PREFIX "META-INF/services/";//表示要被加載的服務的類或接口private final Clas…

帶有自定義注釋的Java注釋教程

Java注釋提供有關代碼的信息&#xff0c;并且它們對所注釋的代碼沒有直接影響。 在本教程中&#xff0c;我們將學習Java注釋&#xff0c;如何編寫自定義注釋 &#xff0c;注釋用法以及如何使用反射來解析注釋 。 注釋是在Java 1.5中引入的&#xff0c;現在它已在Hibernate&…

mybatis通用mapper_全網最全Mapper解析,附實操代碼幫你更好理解

今天給大家介紹一位老朋友當你第一次接觸Java開發的時候&#xff0c;這個老朋友就和你形影不離&#xff0c;當你要進行ORM的時候&#xff0c;單表的增刪改查&#xff0c;這位老朋友給了你極大的幫助&#xff0c;不知道你想到他了嗎&#xff1f;對&#xff0c;這就是通用mapper&…

初嘗微信小程序2-基本框架

基本框架&#xff1a; .wxml &#xff1a;頁面骨架 .wxss &#xff1a;頁面樣式 .js &#xff1a;頁面邏輯 描述一些行為 .json &#xff1a;頁面配置 創建一個小程序之后&#xff0c;app.js,app.json,app.wxss是必須的&#xff0c;而且名字也不能隨意更改&#xff0c;…

JSP內置對象,動作,指令總結

總的來說關于JSP界面有九大內置對象,7大動作,三大指令,現在博主就將這些粘貼出來,此文是很久前整理的學習筆記,如有雷同請諒解! jsp九大內置對象:1>out 向客戶端輸出數據,字節流.如out.print(" dgaweyr"); 2>request 接收客戶端的http請求.String getParameter…

洛谷 P1795 無窮的序列_NOI導刊2010提高(05)

P1795 無窮的序列_NOI導刊2010提高&#xff08;05&#xff09; 題目描述 有一個無窮序列如下&#xff1a; 110100100010000100000… 請你找出這個無窮序列中指定位置上的數字 輸入輸出格式 輸入格式&#xff1a;第一行一個正整數N&#xff0c;表示詢問次數&#xff1b; 接下來的…

java 取字符串中的數字_java截取字符串中的數字

隨便給你一個含有數字的字符串&#xff0c;比如&#xff1a;String s"eert343dfg56756dtry66fggg89dfgf";那我們如何把其中的數字提取出來呢&#xff1f;大致有以下幾種方法&#xff0c;正則表達式&#xff0c;集合類&#xff0c;還有就是String類提供的方法。1 Stri…

番石榴的對象類:Equals,HashCode和ToString

如果您有幸使用JDK 7 &#xff0c;那么新的可用Objects類 &#xff08; 至少對我來說 &#xff09;是實現“通用” Java對象方法&#xff08;例如equals&#xff08;Object&#xff09; [with Objects.equals&#xff08;Object&#xff0c;Object &#xff09; ]&#xff0c; …

此服務器的時鐘與主域控制器的時鐘不一致_中移動“超高精度時間同步服務器”開標,兩家中標...

8月25日&#xff0c;中國移動發布《2020年至2022年同步網設備集中采購_中標候選人公示》公告。兩家中標。同步網技術比較小眾&#xff0c;但是同步網是5G承載網的重要一環&#xff0c;分享一下&#xff0c;供大家參考。中標情況 標包1-時鐘同步設備中標候選人依次排序為&#x…

java 異常管理員_GitHub - kangZan/JCatch: Exception異常管理平臺,支持Java、PHP、Python等多種語言...

什么是JCatch當程序發生異常(Exception)&#xff0c;處理方式一般是通過日志文件記錄下來&#xff0c;這種方式很容易被忽略&#xff0c;而且查詢起來比較麻煩。JCatch提供了一種方案&#xff0c;當程序發生異常時&#xff0c;通過JCatch平臺接口提交到JCatch平臺&#xff0c;由…

oled

gnd、vcc、clk、miso、rst、mosi、cs 轉載于:https://www.cnblogs.com/scrazy/p/7892733.html

使用html css js實現計算器

使用html css js實現計算器&#xff0c;開啟你的計算之旅吧 效果圖&#xff1a; 代碼如下&#xff0c;復制即可使用&#xff1a; <!DOCTYPE html><html lang"en"> <head> <meta charset"utf-8"> <style> /* 主體 */ .co…

面向對象的三個基本特征

面向對象的三個基本特征是&#xff1a;封裝、繼承、多態。封裝 封裝最好理解了。封裝是面向對象的特征之一&#xff0c;是對象和類概念的主要特性。封裝&#xff0c;也就是把客觀事物封裝成抽象的類&#xff0c;并且類可以把自己的數據和方法只讓可信的類或者對象操作&#xff…

Spring構造函數注入和參數名稱

在運行時&#xff0c;除非在啟用了調試選項的情況下編譯類&#xff0c;否則Java類不會保留構造函數或方法參數的名稱。 這對于Spring構造函數注入有一些有趣的含義。 考慮以下簡單的類 package dbg; public class Person {private final String first;private final String …

java學習文檔_資深程序員帶你深入了解JAVA知識點,實戰篇,PDF文檔

JAVA 集合JAVA 集合面對浩瀚的網絡學習資源&#xff0c;您是否為很難找到適合自己的學習資源而感到苦惱過&#xff1f;那么&#xff0c;您來對地方了。在這里我們幫助大家整理了一份適于輕松學習 Java 文章的清單。JVM文字太多&#xff0c;不便之處敬請諒解JAVA 集合文字太多&a…