柚子快報(bào)激活碼778899分享:Java之文件操作和IO
柚子快報(bào)激活碼778899分享:Java之文件操作和IO
目錄
File類
屬性
構(gòu)造方法
方法??
文件內(nèi)容的讀寫(xiě)
InputStream
OutputStream
File類
屬性
修飾符及類型屬性說(shuō)明static StringpathSeparator依賴于系統(tǒng)的路徑分隔符,String類型的表示static charpathSeparator依賴于系統(tǒng)的路徑分隔符,char類型的表示
??
構(gòu)造方法
簽名說(shuō)明File(File parent,String child)根據(jù)父目錄+孩子文件路徑,創(chuàng)建一個(gè)新的File實(shí)例File(String pathname)根據(jù)文件路徑創(chuàng)建一個(gè)新的File實(shí)例,路徑可以是絕對(duì)路徑或者相對(duì)路徑File(String parent,String child)根據(jù)父目錄+孩子文件路徑,創(chuàng)建一個(gè)新的File實(shí)例,父目錄用路徑表示
方法??
修飾符及方法返回值類型方法簽名說(shuō)明StringgetParent()返回File對(duì)象的父目錄文件路徑StringgetName()返回File對(duì)象的純文件名稱StringgetPath()返回File對(duì)象的文件路徑StringgetAbsolutePath()返回File對(duì)象的的絕對(duì)路徑StringgetCanonicalPath()返回File對(duì)象的修飾過(guò)的絕對(duì)路徑booleanexists()判斷File對(duì)象描述的文件是否真實(shí)存在booleanisDirectory()判斷File對(duì)象代表的文件是否是一個(gè)目錄booleanisFile()判斷File對(duì)象代表的文件是否是一個(gè)普通文件booleancreateNewFile()根據(jù)File對(duì)象,自動(dòng)創(chuàng)建一個(gè)空文件,成功創(chuàng)建后返回truebooleandelete()根據(jù)File對(duì)象,刪除該文件,成功刪除后返回truevoiddeleteOnExit()根據(jù)File對(duì)象,標(biāo)注文件將被刪除,刪除動(dòng)作會(huì)到JVM運(yùn)行結(jié)束后才會(huì)進(jìn)行String[]list()返回File對(duì)象代表的目錄下的所有文件名File[]listFiles()返回File對(duì)象代表的目錄下的所有文件,以File對(duì)象表示booleanmkdir()創(chuàng)建File對(duì)象代表的目錄booleanmkdirs()創(chuàng)建File對(duì)象代表的目錄,如果必要,會(huì)創(chuàng)建中間目錄booleanrenameTo(Filedest)進(jìn)行文件改名,也可以視為剪切,粘貼操作booleancanRead()判斷用戶是否對(duì)文件有可讀權(quán)限booleancanWrite() 判斷用戶是否對(duì)文件有可寫(xiě)權(quán)限
代碼示例1
public class demo1 {
public static void main(String[] args) throws IOException {
File f=new File("./test.txt");
System.out.println(f.getParent());
System.out.println(f.getName());
System.out.println(f.getPath());
System.out.println(f.getAbsolutePath());
System.out.println(f.getCanonicalPath());
}
}
運(yùn)行結(jié)果
代碼示例2
public class demo2 {
public static void main(String[] args) throws IOException {
File file=new File("d:/test.txt");
System.out.println(file.exists());
System.out.println(file.isDirectory());
System.out.println(file.isFile());
//創(chuàng)建文件
boolean ret=file.createNewFile();
System.out.println("ret = "+ret);
System.out.println(file.exists());
System.out.println(file.isDirectory());
System.out.println(file.isFile());
}
}
運(yùn)行結(jié)果
代碼示例3
public class demo3 {
public static void main(String[] args) throws InterruptedException {
File f=new File("d:/test.txt");
// boolean ret=f.delete();
// System.out.println("ret = "+ret);
f.deleteOnExit();
Thread.sleep(5000);
System.out.println("進(jìn)程結(jié)束");
}
}
第二種刪除方式是進(jìn)程運(yùn)行結(jié)束后才刪除。
代碼示例4
public class demo4 {
public static void main(String[] args) {
File f=new File("d:/");
String[] files=f.list();
System.out.println(Arrays.toString(files));
}
}
運(yùn)行結(jié)果
代碼示例5
public class demo5 {
public static void main(String[] args) {
File f=new File("d:/aaa/bbb/ccc");
// boolean ret=f.mkdir();
boolean ret=f.mkdirs();
System.out.println("ret = "+ret);
}
}
運(yùn)行結(jié)果
文件內(nèi)容的讀寫(xiě)
InputStream
方法
修飾符及返回值類型方法簽名說(shuō)明intread()讀取一個(gè)字節(jié)的數(shù)據(jù),返回-1代表已經(jīng)完全讀完了intread(byte[] b)最多讀取b.length字節(jié)的數(shù)據(jù)到b中,返回實(shí)際獨(dú)到的數(shù)量,-1代表讀完了intread(byte[] b,int off,int len)最多讀取len-off字節(jié)的數(shù)據(jù)到b中,放在從off開(kāi)始,返回實(shí)際獨(dú)到的數(shù)量,-1代表讀完了readclose()關(guān)閉字節(jié)流
InputStream 只是一個(gè)抽象類,要使用還需要具體的實(shí)現(xiàn)類。關(guān)于 InputStream 的實(shí)現(xiàn)類有很多,基本可以認(rèn)為不同的輸入設(shè)備都可以對(duì)應(yīng)一個(gè) InputStream 類,我們現(xiàn)在只關(guān)心從文件中讀取,所以使用 FileInputStream?。
FileInputStream
簽名說(shuō)明FileInputStream(File file)利用File構(gòu)造文件輸入流FileInputStream(String name)利用文件路徑構(gòu)造文件輸入流
代碼示例1
public class demo9 {
public static void main(String[] args) {
try(InputStream inputStream=new FileInputStream("d:/test.txt")){
byte[] buffer=new byte[1024];
int n=inputStream.read(buffer);
System.out.println("n = "+n);
for (int i = 0; i < n; i++) {
System.out.printf("%x\n",buffer[i]);
}
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
?運(yùn)行結(jié)果
代碼示例2
public class demo11 {
public static void main(String[] args) {
try(InputStream inputStream=new FileInputStream("d:/test.txt")){
Scanner scanner=new Scanner(inputStream);
String s=scanner.next();
System.out.println(s);
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
??運(yùn)行結(jié)果
OutputStream
方法
修飾符及返回值類型方法簽名說(shuō)明voidwrite(int b)寫(xiě)入一個(gè)字節(jié)的數(shù)據(jù)voidwrite(byte[] b)將b這個(gè)字節(jié)數(shù)組中的數(shù)組全部寫(xiě)入OSintwrite(byte[] b,int off,int len)將b這個(gè)字節(jié)數(shù)組中從off開(kāi)始的數(shù)據(jù)寫(xiě)入OS,一共寫(xiě)len個(gè)voidclose()關(guān)閉字節(jié)流voidflush()
重要:我們知道
I/O
的速度是很慢的,所以,大多的
OutputStream
為了減少設(shè)備操作的次數(shù),在寫(xiě)數(shù)據(jù)的時(shí)候都會(huì)將數(shù)據(jù)先暫時(shí)寫(xiě)入內(nèi)存的
一個(gè)指定區(qū)域里,直到該區(qū)域滿了或者其他指定條件時(shí)才真正將數(shù)據(jù)寫(xiě)
入設(shè)備中,這個(gè)區(qū)域一般稱為緩沖區(qū)。但造成一個(gè)結(jié)果,就是我們寫(xiě)的
數(shù)據(jù),很可能會(huì)遺留一部分在緩沖區(qū)中。需要在最后或者合適的位置,
調(diào)用
flush
(刷新)操作,將數(shù)據(jù)刷到設(shè)備中。
?OutputStream 同樣只是一個(gè)抽象類,要使用還需要具體的實(shí)現(xiàn)類。我們現(xiàn)在還是只關(guān)心寫(xiě)入文件中,所以使用 FileOutputStream。
代碼示例1
public class demo10 {
public static void main(String[] args) {
try(OutputStream outputStream=new FileOutputStream("d:/test.txt",true)) {
String s="你好世界";
outputStream.write(s.getBytes());
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
} ;
}
}
運(yùn)行結(jié)果
代碼示例2
public class demo12 {
public static void main(String[] args) {
try(OutputStream outputStream=new FileOutputStream("d:/test.txt")){
PrintWriter writer=new PrintWriter(outputStream);
writer.println("hello");
writer.flush();
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
運(yùn)行結(jié)果
代碼示例3
刪除指定目錄下的指定關(guān)鍵詞的文件
public class demo13 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("請(qǐng)輸入要掃描的路徑");
String path=scanner.next();
File rootPath=new File(path);
if(!rootPath.isDirectory()){
System.out.println("輸入的路徑有誤");
return;
}
System.out.println("請(qǐng)輸入要?jiǎng)h除文件的關(guān)鍵詞");
String word=scanner.next();
scanDir(rootPath,word);
}
private static void scanDir(File rootPath,String word){
File[] files=rootPath.listFiles();
if(files==null)
return;
for (File f:files) {
System.out.println("當(dāng)前掃描的文件:"+f.getAbsolutePath());
if(f.isFile())
checkDelete(f,word);
else
scanDir(f,word);
}
}
private static void checkDelete(File f,String word){
if(!f.getName().contains(word))
return;
System.out.println("當(dāng)前文件為:"+f.getAbsolutePath()+",請(qǐng)確認(rèn)是否刪除");
Scanner scanner=new Scanner(System.in);
String choice=scanner.next();
if(choice.equals("Y") || choice.equals("y")){
f.delete();
System.out.println("刪除完畢");
}else{
System.out.println("取消刪除");
}
}
}
柚子快報(bào)激活碼778899分享:Java之文件操作和IO
精彩內(nèi)容
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。