如果你的生成File的文件和a.jpg在同一級的話。你用File f=new File("a.jpg");x0dx0a如果你的生成File的文件和a.jpg不在同一級的話:1.File在外,a.jpg在pic文件夾則File f=new File("pic/a.jpg");x0dx0a2.File在file文件夾,a.jpg在pic文件夾則File f=new File("../pic/a.jpg");x0dx0a3.File在file文件夾,a.jpg外則File f=new File("../a.jpg");
② java中用相對路徑打開文件。
1、在Java開發工具的project中使用相對路徑
在project中,相對路徑的根目錄是project的根文件夾,在此就是repathtest文件夾了。創建文件的寫法是:
Filef=newFile("src/com/lavasoft/res/a.txt");
Filef=newFile("doc/b.txt");
注意:路徑不以「/」開頭;
脫離了IDE環境,這個寫法就是錯誤的,也並非每個IDE都如此。
2、通過CLASSPATH讀取包內文件
讀取包內文件,使用的路徑一定是相對的classpath路徑,比如a,位於包內,此時可以創建讀取a的位元組流:
InputStreamin=ReadFile.class.getResourceAsStream("/com/lavasoft/res/a.txt");
有了位元組流,就能讀取到文件內容了。
注意:這里必須以「/」開頭;
3、看看完整的java中用相對路徑打開文件測試代碼:
packagecom.lavasoft.test;
importjava.io.*;
/**
*Java讀取相對路徑的文件
*
*/
publicclassReadFile{
publicstaticvoidmain(String[]args){
readTextA_ByClassPath();
readTextA_ByProjectRelativePath();
readTextB_ByProjectRelativePath();
}
/**
*通過工程相對路徑讀取(包內)文件,注意不以「/」開頭
*/
publicstaticvoidreadTextA_ByProjectRelativePath(){
System.out.println("-----------------readTextA_ByProjectRelativePath---------------------");
Filef=newFile("src/com/lavasoft/res/a.txt");
Stringa=file2String(f,"GBK");
System.out.println(a);
}
/**
*通過工程相對路徑讀取(包外)文件,注意不以「/」開頭
*/
publicstaticvoidreadTextB_ByProjectRelativePath(){
System.out.println("-----------------readTextB_ByProjectRelativePath---------------------");
Filef=newFile("doc/b.txt");
Stringb=file2String(f,"GBK");
System.out.println(b);
}
/**
*通過CLASSPATH讀取包內文件,注意以「/」開頭
*/
publicstaticvoidreadTextA_ByClassPath(){
System.out.println("-----------------readTextA_ByClassPath---------------------");
InputStreamin=ReadFile.class.getResourceAsStream("/com/lavasoft/res/a.txt");
Stringa=stream2String(in,"GBK");
System.out.println(a);
}
/**
*文件轉換為字元串
*
*@paramf文件
*@paramcharset文件的字元集
*@return文件內容
*/
publicstaticStringfile2String(Filef,Stringcharset){
Stringresult=null;
try{
result=stream2String(newFileInputStream(f),charset);
}catch(FileNotFoundExceptione){
e.printStackTrace();
}
returnresult;
}
/**
*文件轉換為字元串
*
*@paramin位元組流
*@paramcharset文件的字元集
*@return文件內容
*/
(InputStreamin,Stringcharset){
StringBuffersb=newStringBuffer();
try{
Readerr=newInputStreamReader(in,charset);
intlength=0;
for(char[]c=newchar[1024];(length=r.read(c))!=-1;){
sb.append(c,0,length);
}
r.close();
}catch(UnsupportedEncodingExceptione){
e.printStackTrace();
}catch(FileNotFoundExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}
returnsb.toString();
}
}
③ 什麼是文件的相對路徑怎麼把文件路徑改為相對路徑
��什麼是相對路徑?相對路徑就是指由這個文件所在的路徑引起的跟其它文件(或文件夾)的路徑關系。使用相對路徑可以為我們帶來非常多的便利。下面舉實例詳解:
��一、例如在本地硬碟有如下兩文件,它們要互做超鏈接
G:\site\index.htm
G:\site\web\article\01.htm
如下圖:
��
��index.htm要想鏈接到01.htm這個文件,正確的鏈接應該是:<a href=web/article/01.htm>鏈接文字</a>,這是標準的相對路徑。
��反過來,01.htm要想鏈接到index.htm這個文件,在01.htm文件裡面應該寫上這句:<a href=../../index.htm>返回首頁</a>。這里的../表示向上一級。
��至此,你已經了解相對路徑的概念了,就是這樣簡單明了。如果你還是沒有看明白,以前學過DOS嗎?它的「CD 文件夾名」和「CD..」命令用過嗎?這是同理的。
��注意:相對路的文件夾符號是斜杠:/
��<a href=/web/article/01.htm>鏈接文字</a>這樣的鏈接,在href後面的第一個斜杠表示根目錄,通常我們要特別慎用這種方式。
��二、什麼是絕對路徑?
��在www中(廣域網),以http開頭的鏈接都是絕對路徑。
��三、什麼是物理路徑?
��物理路徑指的是某一台計算機本地的路徑,以盤符開頭,例如C:\、D:\temp等等。ASP的資料庫連接中,只能連接物理路徑,而不能連接相對路徑,所以需要用server.mappath對象把相對路徑轉化成物理路徑
參考:http://www.webshu.com/tutorial/tor/7,id=0401.htm
http://blog.joycode.com/shannon/archive/2004/05/11/21181.aspx
④ EXCEL如何使用VBA打開相對路徑下的文件或文件夾
打開文件如下:
Workbooks.Open ("C:對賬單對帳單.xlsx")
這里你可以把「C:對賬單」換成你的絕對路徑,
你可以用:a = ThisWorkbook.Path
a = ThisWorkbook.Path
Workbooks.Open ("" & a & "&" "&對帳單.xlsx")
來獲取你當前表的絕對路徑,然後再打開,因為不知道你的具體情況,如果有問題可以hai我
如果當前文件夾下還有A文件夾可以用代碼:
Workbooks.Open ("" & a & "&" A"&b.xlsx")
⑤ 如何用它在Linux的相對路徑打開一個文件
1. 如果程序不是由自己做,這是一個糟糕的計劃。糟糕的程序應包有一點的Bash腳本:#!/bin/bash
set -e
cd $(readlink -f $(dirname $0))
exec ./myprog $*
上面的腳本確定所在的目錄,然後更改當前工作目錄到該目錄並運行一個程序myprog從那裡,通過所有透明。你必須把這個腳本到你的程序所在的目錄,然後運行你的程序來代替它。 假設您有訪問源代碼並可以修復程序,proc文件系統來確定程序的位置和絕對路徑。 例如,/proc/self/exe將永遠是一個符號鏈接指向的當前進程的二進制文件。使用readlink讀取它的值 CodeGo.net,再切可執行文件和你得到的目錄。
2. 出現了問題,前一段時間如何找到在C中的可執行文件的位置 你打開你的配置,資源,等這個路徑..
3. 一種方法是ARGV [0]-有你的程序的相對路徑(例如./programs/test/a.out)。如果你切的程序,並添加到文件的相對路徑,你會得到一個怪物(例如./programs/test/../../input_data),但它應該工作。
4. 最簡單的方法是要麼把你的程序在一個預先知道的地方(/ bin中,/ usr / bin中,等)。如果沒有,你在argv [0],刪除該程序(最後一部分),作為你的工作目錄前綴的所有相對路徑(如果你想相對路徑是相對於你的程序是)。 此外,你可以決定你的上面(使用的路徑argv[0]),然後調用一個chdir()與此目錄。從此所有的相對路徑上是相對於所在的程序。但請注意,在這種情況下,你必須確定是否argv[0]占據絕對路徑。如果沒有,你必須得到當前工作目錄(getcwd()),然後追加的目錄部分argv[0]。但是,請注意,改變當前工作目錄。是不是一個好主意,通常情況下,彷彿給你一個文件路徑作為這將是相對於當前的工作目錄,而不是相對於所在的程序存儲。 例子:想像一下,你的程序在生活/usr/bin。你可以打電話給你的程序為:/usr/bin/myprog
(這將是argv[0]。trim的可執行文件,你有你的目錄。)或者,是,比方說,在/usr:./bin/myprog
現在,argv[0]是一個相對路徑。你必須在前面加上當前工作目錄(/usr)到一個在argv[0]:/usr/./bin/myprog,然後再次trim可執行文件的目錄將再次/usr/bin。
5. 唐的相對路徑。使用絕對路徑。你可能有一個config.h頭文件中定義的常量,指定安裝的可執行文件。然後,前置一個字元串常量到您在代碼中指定任何相對路徑。
6. openat打開相對於你傳遞一個特定的目錄文件描述符的文件,但我不認為這真的是你想要的(精確)什麼。 你將需要找到當前可執行文件的目錄,然後創建一個開放的呼叫相對於(使用字元串運算符來建立路徑,openat,或改變當前目錄到該目錄)。 為了找到可執行文件,可以readlink/proc/self/exe。readlink讀取路徑的符號鏈接指向,並/proc/self是一個符號鏈接/proc/<PID>哪裡<PID>是當前進程(在內核中處理特殊)的進程ID,以及exe以下是該進程的可執行文件的符號鏈接。然後,你需要掏錢的路徑的可執行文件,。 所有這一切都這么說,應該避免這樣一種方式,他們希望找到相對於其可執行文件的東西寫程序。
7. 好吧,如果你的程序需要從依賴安裝程序所在的位置打開一個文件時,你應該做這個選項。有你的編譯系統設置的CPP宏表示,其中有問題的數據文件,可以發現該目錄。這是什麼樣的-datadir的選項在標准配置「的configure,make,make install的」內置程序經常做。 當然,如果你真的想要,可以通過編程改變工作目錄與chdirPOSIX函數。但就像我說的,如果一個程序需要知道它位於何處,這應該是提供那麼你不需要重寫的選擇工作目錄中。
8. 您可以從確定執行路徑argv[0]但這樣做的時候要小心。 你所描述的是一個眾所周知的和預期的語義。用戶expect這種行為。
9. 下面是代碼,你要找到你的程序在你的安裝路徑(與你的程序替換「test0002」):#include <iostream>
#include <sstream>
#include <string>
#include <fstream>
#include <unistd.h>
///=============================================================================
std::string FindInstallPath()
{
std::string sret="";
int pid = (int)getpid();
bool b=false;
std::string sf, s;
std::stringstream ss;
ss << "/proc/" << pid << "/maps";
sf = ss.str();
std::ifstream ifs(sf.c_str());
size_t pos1, pos2;
while (!b && ifs.good())
{
std::getline(ifs, s);
if ((pos1 = s.rfind("test0002")) != std::string::npos)
{
if ((pos2 = s.find_first_of('/')) != std::string::npos)
sret = s.substr(pos2, pos1 - pos2);
b = true;
}
}
if (!b) sret = "";
ifs.close();
return sret;
}