File類(lèi)里面有兩個(gè)方法可以實(shí)現(xiàn):
創(chuàng)新互聯(lián)建站長(zhǎng)期為近千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為建鄴企業(yè)提供專(zhuān)業(yè)的網(wǎng)站建設(shè)、成都網(wǎng)站制作,建鄴網(wǎng)站改版等技術(shù)服務(wù)。擁有10多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。
一個(gè)是mkdir():創(chuàng)建此抽象路徑名指定的目錄。
另外一個(gè)是mkdirs(): 創(chuàng)建此抽象路徑名指定的目錄,包括所有必需但不存在的父目錄。
比如你想在A文件夾創(chuàng)建一個(gè)B文件夾,并在B文件夾下創(chuàng)建c和D文件夾,可以用下面的代碼實(shí)現(xiàn):
import java.io.File;
public class Test {
public static void main(String args[]) {
File file = new File("D:\\A\\B\\C");
file.mkdirs();
file = new File("D:\\A\\B\\D");
file.mkdir();
}
}
java
是跨平臺(tái)的開(kāi)發(fā)語(yǔ)言,建立文件夾的方式是一樣的
File
file
=
new
File("/usr/local/java");
file.mkdirs();
這樣就行了
具體的創(chuàng)建方法參照下面的實(shí)例:
public class FileTest {
public?static?void?main(String[]?args)?{
//?根據(jù)系統(tǒng)的實(shí)際情況選擇目錄分隔符(windows下是,linux下是/)
String?separator?=?File.separator;
String?directory?=?"myDir1"?+?separator?+?"myDir2";
//?以下這句的效果等同于上面兩句,windows下正斜杠/和反斜杠都是可以的
//?linux下只認(rèn)正斜杠,為了保證跨平臺(tái)性,不建議使用反斜杠(在java程序中是轉(zhuǎn)義字符,用\來(lái)表示反斜杠)
//?String?directory?=?"myDir1/myDir2";
String?fileName?=?"myFile.txt";
//?在內(nèi)存中創(chuàng)建一個(gè)文件對(duì)象,注意:此時(shí)還沒(méi)有在硬盤(pán)對(duì)應(yīng)目錄下創(chuàng)建實(shí)實(shí)在在的文件
File?f?=?new?File(directory,fileName);
if(f.exists())?{
//?文件已經(jīng)存在,輸出文件的相關(guān)信息
System.out.println(f.getAbsolutePath());
System.out.println(f.getName());
System.out.println(f.length());
}?else?{
//??先創(chuàng)建文件所在的目錄
f.getParentFile().mkdirs();
try?{
//?創(chuàng)建新文件
f.createNewFile();
}?catch?(IOException?e)?{
System.out.println("創(chuàng)建新文件時(shí)出現(xiàn)了錯(cuò)誤。。。");
e.printStackTrace();
}
}
}
}
參考下面代碼,說(shuō)明已在代碼中注釋?zhuān)?/p>
import?java.io.File;
import?java.io.FileOutputStream;
import?java.io.IOException;
import?java.text.SimpleDateFormat;
import?java.util.Date;
public?class?WriteFile?{
public?static?void?main(String[]?args)?{
writeFile();
}
public?static?void?writeFile(){
SimpleDateFormat?sdf?=?new?SimpleDateFormat("yyyy-MM-dd?HH:mm:ss");
String?content?=?sdf.format(new?Date());
System.out.println("現(xiàn)在時(shí)間:"?+?content);
FileOutputStream?out?=?null;
File?file;
try?{
String?rootFile?=?"D:\\tests\\license";
file?=?new?File(rootFile);
if?(!file.exists())?{
/*
file.mkdirs():創(chuàng)建沒(méi)有存在的所有文件夾
file.mkdir():創(chuàng)建沒(méi)有存在的最后一層文件夾
例如:在硬盤(pán)上有D://test?文件夾,但是現(xiàn)在需要?jiǎng)?chuàng)建D://test//license//save,這個(gè)時(shí)候就需要使用file.mkdirs()而不能使用file.mkdir(),另外這兩個(gè)方法都是僅僅能創(chuàng)建文件夾,不能創(chuàng)建文件,即使創(chuàng)建D://test//license//save//systemTime.dat如果使用該方法創(chuàng)建的SystemTime.dat也是一個(gè)文件夾?,而不是文件
*/
file.mkdirs();
}
File?fileDat?=?new?File(rootFile?+?"\\systemFile.dat");
/*
if(!fileDat.exists()){
//創(chuàng)建文件?不是文件夾,在程序中這這一步?jīng)]有必要,因?yàn)?/p>
new?FileOutputStream(fileDat);該語(yǔ)句有創(chuàng)建文件的功能
fileDat.createNewFile();//
}
*/
out?=?new?FileOutputStream(fileDat);
byte[]?contentInBytes?=?content.getBytes();
out.write(contentInBytes);
out.flush();
out.close();
System.out.println("Done");
}?catch?(IOException?e)?{
e.printStackTrace();
}?finally?{
try?{
if?(out?!=?null)?{
out.close();
}
}?catch?(IOException?e)?{
e.printStackTrace();
}
}
}
}
Java項(xiàng)目添加文件夾選項(xiàng)的意思是:你的java代碼寫(xiě)的不全,必須要把空文件夾的情況寫(xiě)入才行。
java項(xiàng)目創(chuàng)建包以及調(diào)試運(yùn)行的方法:
1、首先我們?cè)谧烂嬲业絜clipse,雙擊將其打開(kāi)。
2、在這里我已經(jīng)創(chuàng)建了一個(gè)名為helloworld的java項(xiàng)目,但其下還為創(chuàng)建任何的包以及文件。下邊我們開(kāi)始創(chuàng)建第一個(gè)包路徑。一般來(lái)說(shuō)java代碼都是寫(xiě)在src文件夾下,選中src右擊鼠標(biāo)創(chuàng)建一個(gè)包路徑,選擇new然后選擇package。
3、在創(chuàng)建包路徑界面,我們需要給我們的包進(jìn)行命名。命名規(guī)則一般為域名.公司名.工程名.模塊名……假如需要建立一個(gè)百度地圖的應(yīng)用包ditu.baidu.com,那我們的包名即為com.baidu.ditu。命名結(jié)束后點(diǎn)擊Finish。
4、我們可以看到包的路徑已經(jīng)建好了。
5、接下來(lái)我們需要在包里面建立java文件,右擊包名稱(chēng),選擇new-〉class。
6、java文件的命名規(guī)則為單詞首字母大寫(xiě),如果多個(gè)單詞則每個(gè)首字母都需要大寫(xiě)。在新建java文件頁(yè)面,我們看到下方有個(gè)設(shè)置項(xiàng)為public static void main (string[] args),這個(gè)選項(xiàng)是對(duì)該java類(lèi)自動(dòng)創(chuàng)建一個(gè)主函數(shù)。我們將其選中,并點(diǎn)擊Finish。
7、可以看到在新創(chuàng)建的這個(gè)類(lèi)中已經(jīng)自動(dòng)創(chuàng)建了一個(gè)主函數(shù),以及類(lèi)的包路徑都已經(jīng)自動(dòng)的引入。在左側(cè)試圖中可以查看到新創(chuàng)建的java類(lèi)。
8、那eclipse中如何對(duì)java工程進(jìn)行調(diào)試呢?這里我們通過(guò)一個(gè)最簡(jiǎn)單也是初學(xué)者入門(mén)就接觸的一個(gè)實(shí)例叫'hell oworld!'。我們?cè)谥鞒绦蛑刑砑右恍写a,也是最常見(jiàn)的輸出命令。改行代碼的意思為當(dāng)程序運(yùn)行時(shí)將‘測(cè)試輸出!’輸出到控制臺(tái)。
9、接下來(lái)我們?cè)賘ava類(lèi)中右擊鼠標(biāo),選擇run as-〉java ?application。
10、接下來(lái)我們可以看到‘測(cè)試輸出!’的字樣在控制臺(tái)打印出來(lái)了。這樣一個(gè)完整的java調(diào)試就結(jié)束了。
public class ReadFromFile {
/**
* 以字節(jié)為單位讀取文件,常用于讀二進(jìn)制文件,如圖片、聲音、影像等文件。
*/
public static void readFileByBytes(String fileName) {
File file = new File(fileName);
InputStream in = null;
try {
System.out.println("以字節(jié)為單位讀取文件內(nèi)容,一次讀一個(gè)字節(jié):");
// 一次讀一個(gè)字節(jié)
in = new FileInputStream(file);
int tempbyte;
while ((tempbyte = in.read()) != -1) {
System.out.write(tempbyte);
}
in.close();
} catch (IOException e) {
e.printStackTrace();
return;
}
try {
System.out.println("以字節(jié)為單位讀取文件內(nèi)容,一次讀多個(gè)字節(jié):");
// 一次讀多個(gè)字節(jié)
byte[] tempbytes = new byte[100];
int byteread = 0;
in = new FileInputStream(fileName);
ReadFromFile.showAvailableBytes(in);
// 讀入多個(gè)字節(jié)到字節(jié)數(shù)組中,byteread為一次讀入的字節(jié)數(shù)
while ((byteread = in.read(tempbytes)) != -1) {
System.out.write(tempbytes, 0, byteread);
}
} catch (Exception e1) {
e1.printStackTrace();
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e1) {
}
}
}
}
/**
* 以字符為單位讀取文件,常用于讀文本,數(shù)字等類(lèi)型的文件
*/
public static void readFileByChars(String fileName) {
File file = new File(fileName);
Reader reader = null;
try {
System.out.println("以字符為單位讀取文件內(nèi)容,一次讀一個(gè)字節(jié):");
// 一次讀一個(gè)字符
reader = new InputStreamReader(new FileInputStream(file));
int tempchar;
while ((tempchar = reader.read()) != -1) {
// 對(duì)于windows下,\r\n這兩個(gè)字符在一起時(shí),表示一個(gè)換行。
// 但如果這兩個(gè)字符分開(kāi)顯示時(shí),會(huì)換兩次行。
// 因此,屏蔽掉\r,或者屏蔽\n。否則,將會(huì)多出很多空行。
if (((char) tempchar) != '\r') {
System.out.print((char) tempchar);
}
}
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
System.out.println("以字符為單位讀取文件內(nèi)容,一次讀多個(gè)字節(jié):");
// 一次讀多個(gè)字符
char[] tempchars = new char[30];
int charread = 0;
reader = new InputStreamReader(new FileInputStream(fileName));
// 讀入多個(gè)字符到字符數(shù)組中,charread為一次讀取字符數(shù)
while ((charread = reader.read(tempchars)) != -1) {
// 同樣屏蔽掉\r不顯示
if ((charread == tempchars.length)
(tempchars[tempchars.length - 1] != '\r')) {
System.out.print(tempchars);
} else {
for (int i = 0; i charread; i++) {
if (tempchars[i] == '\r') {
continue;
} else {
System.out.print(tempchars[i]);
}
}
}
}
} catch (Exception e1) {
e1.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e1) {
}
}
}
}
/**
* 以行為單位讀取文件,常用于讀面向行的格式化文件
*/
public static void readFileByLines(String fileName) {
File file = new File(fileName);
BufferedReader reader = null;
try {
System.out.println("以行為單位讀取文件內(nèi)容,一次讀一整行:");
reader = new BufferedReader(new FileReader(file));
String tempString = null;
int line = 1;
// 一次讀入一行,直到讀入null為文件結(jié)束
while ((tempString = reader.readLine()) != null) {
// 顯示行號(hào)
System.out.println("line " + line + ": " + tempString);
line++;
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e1) {
}
}
}
}
/**
* 隨機(jī)讀取文件內(nèi)容
*/
public static void readFileByRandomAccess(String fileName) {
RandomAccessFile randomFile = null;
try {
System.out.println("隨機(jī)讀取一段文件內(nèi)容:");
// 打開(kāi)一個(gè)隨機(jī)訪問(wèn)文件流,按只讀方式
randomFile = new RandomAccessFile(fileName, "r");
// 文件長(zhǎng)度,字節(jié)數(shù)
long fileLength = randomFile.length();
// 讀文件的起始位置
int beginIndex = (fileLength 4) ? 4 : 0;
// 將讀文件的開(kāi)始位置移到beginIndex位置。
randomFile.seek(beginIndex);
byte[] bytes = new byte[10];
int byteread = 0;
// 一次讀10個(gè)字節(jié),如果文件內(nèi)容不足10個(gè)字節(jié),則讀剩下的字節(jié)。
// 將一次讀取的字節(jié)數(shù)賦給byteread
while ((byteread = randomFile.read(bytes)) != -1) {
System.out.write(bytes, 0, byteread);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (randomFile != null) {
try {
randomFile.close();
} catch (IOException e1) {
}
}
}
}
/**
* 顯示輸入流中還剩的字節(jié)數(shù)
*/
private static void showAvailableBytes(InputStream in) {
try {
System.out.println("當(dāng)前字節(jié)輸入流中的字節(jié)數(shù)為:" + in.available());
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String fileName = "C:/temp/newTemp.txt";
ReadFromFile.readFileByBytes(fileName);
ReadFromFile.readFileByChars(fileName);
ReadFromFile.readFileByLines(fileName);
ReadFromFile.readFileByRandomAccess(fileName);
}
}
復(fù)制代碼
5、將內(nèi)容追加到文件尾部
public class AppendToFile {
/**
* A方法追加文件:使用RandomAccessFile
*/
public static void appendMethodA(String fileName, String content) {
try {
// 打開(kāi)一個(gè)隨機(jī)訪問(wèn)文件流,按讀寫(xiě)方式
RandomAccessFile randomFile = new RandomAccessFile(fileName, "rw");
// 文件長(zhǎng)度,字節(jié)數(shù)
long fileLength = randomFile.length();
//將寫(xiě)文件指針移到文件尾。
randomFile.seek(fileLength);
randomFile.writeBytes(content);
randomFile.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* B方法追加文件:使用FileWriter
*/
public static void appendMethodB(String fileName, String content) {
try {
//打開(kāi)一個(gè)寫(xiě)文件器,構(gòu)造函數(shù)中的第二個(gè)參數(shù)true表示以追加形式寫(xiě)文件
FileWriter writer = new FileWriter(fileName, true);
writer.write(content);
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String fileName = "C:/temp/newTemp.txt";
String content = "new append!";
//按方法A追加文件
AppendToFile.appendMethodA(fileName, content);
AppendToFile.appendMethodA(fileName, "append end. \n");
//顯示文件內(nèi)容
ReadFromFile.readFileByLines(fileName);
//按方法B追加文件
AppendToFile.appendMethodB(fileName, content);
AppendToFile.appendMethodB(fileName, "append end. \n");
//顯示文件內(nèi)容
ReadFromFile.readFileByLines(fileName);
}
}