java基礎-檔案與IO
以下內容為本人的學習筆記,如需要轉載,請宣告原文鏈接 https://www.cnblogs.com/lyh1024/p/16772853.html
IO是一個龐大的體系,資訊傳遞的通道靠IO,例如:檔案讀寫、上傳下載、網路通信等都要用到,
1.File類的基本概念
File類:表示檔案和目錄路徑名的抽象表示形式
File類可以實作檔案的創建、洗掉、重命名、得到路徑、創建時間等等,是唯一與檔案本身有關的操作類
File類的操作方法
| Method | 說明 |
|---|---|
| public static final String separator | 表示路徑分隔符“ \ ” |
| public File(String pathname) | 構造File類實體,要傳入路徑 |
| public boolean createNewFile() | 創建新檔案 |
| public boolean delete() | 洗掉檔案 |
| public boolean isDirectory() | 判斷給定的路徑是否是檔案夾 |
| public boolean isFIle() | 判斷給定的路徑是否是檔案 |
| public String[] list() | 列出檔案夾中的檔案 |
| public File[] listFiles() | 列出檔案夾中的所有檔案 |
| boolean mkdir() | 創建新的檔案夾 |
| public boolean renameTo(File dest) | 為檔案重命名 |
| public long length() | 回傳檔案大小 |
| String getPath() | 路徑名字串 |
/**
File類的使用
*/
public static void main(String[] args){
//File類表示一個檔案或目錄
//“c:\\test\\vince.txt"
//"c:/test/vince.txt"
File f1 = new File("C:/test/vince.txt");
if(!f1.exists()){
//判斷f1指向的檔案是否存在
try{
f1.createNewFile();//創建檔案
System.out.println("檔案創建成功")
}catch(IOException e){
e.printStackTrace();
}
}
//f1.isFile()是否為檔案
System.out.println("是否為檔案夾:"+f1.isDirectory());
File f2 = new File("c:\\test\\my");
boolean b = f2.delete();//delete()只能洗掉空檔案夾
System.out.println(b);
String[] names = f2.list();//列出當前目錄下的所有檔案名
System.out.println(Arrays.toString(names);
File[] fs = f2.listFiles();//列出當前目錄下的所有檔案,以file物件回傳
for(File f : fs){
System.out.println("length="+f.length());
System.out.println("name="+f.name());
System.out.println("相對路徑path="+f.path());
System.out.println("絕對路徑getAbsolutePath="+f.getAbsolutePath());
System.out.println("是否為隱藏檔案="+f.isHidden());
System.out.println("是否可讀檔案="+f.canRead());
System.out.println("檔案最后修改的時間="+f.lastModified());
System.out.println("-------------“);
?
}
File f3 = new File("temp.txt");
System.out.println(f3.getPath());
System.out.println(f3.getAbsolutePath());
?
File f4 = new File("c:\\test\\dabin");
f4.mkdirs();
//重命名與移動檔案
//f4.renameTo(new File("C:\\test\\dabin1"))
f4.renameTo(new File("c:\\dabin1"));
File f5 = new File("c:\\test\\my");
// File[] files = f5.listFiles(new FileFilter(){
// public boolean accept(File pathname){
// return pathname.getName().endsWith(".txt");
// }
// }) ;
File[] files = f5.listFiles((pathname)->pathname.getName().endsWith(".txt"));
System.out.println("-------");
for(File f: files){
System.out.println(f.getName());
}
}
示例
/**
在指定的目錄中查找檔案
*/
public class FileDeom2{
public static void main(String[] args){
findFile(new File("c:\\Users\\vince\\Downloads"),".jpg");
}
//查找檔案的方法
private static void findFile(File target,String ext){
if(target==null)return;
//如果檔案是目錄
if(target.isDirectory()){
File[] files = target.listFiles();
if(files!=null){
for(File f : files){
findFile(f,ext);//遞回呼叫,一層層找,層數太深,會溢位
}
}
}else{
//此處表示File是一個檔案
String name = target.getName().toLowerCase();
if(name.endsWith(ext)){
System.out.println(target.getAbsolutePath());
}
}
}
}
2.位元組流
2.1 IO流概述
IO流:輸入輸出流(Input/Output)
流是一組有順序的,有起點和終點的位元組集合,是對資料傳輸的總稱或抽象,即資料在兩設備間的傳輸稱為流
流的本質是資料傳輸,根據資料傳輸特性將流抽象為各種類,方便更直觀的進行資料操作,
2.2 IO流的分類
根據處理資料型別的不同分為:字符流和位元組流
根據資料流向不同分為:輸入流和輸出流
位元組是資料傳輸的基本單位,檔案內容以位元組為單位存盤
讀檔案叫輸入流,從檔案中把資料讀到程式使用輸入流
寫檔案叫輸出流,從程式中把資料寫到檔案使用輸出流
2.3 位元組輸出流
OutputStream類定義
-
public abstract class **OutputStream**extends Object implements Closeable,Flushable
此抽象類是表示輸出位元組流的所有類的超類,輸出流接受輸出位元組并將這些位元組發送到InputStream類某個接收器,要向檔案中輸出,使用FileOutputStream類
2.4 位元組輸入流
InputStream定義:
-
public abstract class **InputStream**extends Object implements Closeable
此抽象類是表示位元組輸入流的所有類的超類
FileInputStream從檔案系統中的某個檔案中獲得輸入位元組
/**
位元組輸出輸入流
輸出流:超類OutputStream,對檔案的輸出流使用子類FileOutputStream
輸入流:超類InputStream,對檔案的輸入流使用子類FileInputStream
*/
public class ByteStreamDemo{
?
private static void in\(){
//1、確定目標檔案
File file = new File("c:\\test\\vince.txt");
//2.構建一個檔案輸入流物件
try{
InputStream in = new FileInputStream(file);
//3.宣告StringBuilder
StringBUilder buf = new StringBuilder();
//4.宣告陣列和長度
byte[] bytes = new byte[1024];//1024個位元組
int len = -1 ;//表示每次讀取的位元組長度,-1表不存在
//5.把資料讀入到陣列中并回傳讀取的位元組數,當不等-1時,表示讀取到資料,等于-1表示檔案已經讀完
while(len = in.read(bytes)!= -1 ){
//6.根據讀取到的位元組陣列,再轉換為字串內容,添加到StringBilder中
buf.append(new String(bytes));
}
//7.列印內容
System.out.println(buf);
//8.關閉輸入流
in.close();
}catch (FileNotFoundException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
private static void out(){
//1、確定目標檔案
File file = new File("c:\\test\\vince.txt");
//2.構建一個檔案輸出流物件
try{
OutputStream out = new FileOutputStream(file);//每一次執行會覆寫
//OutputStream out = new FileOutputStream(file,true);//append為true表示追加內容
?
//3.輸出的內容是
String info = "疑是銀河落九天\r\n";//在windows里'\r\n'表示換行
//String line = System.getProperty("line.separator");//獲取換行符
//4.把內容寫入到檔案
out.write(info.getBytes())//不能傳字符,要轉換成位元組
//5.關閉流
out.close();
System.out.println("write success...");
}catch (FileNotFoundException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
}
public static void main(String[] args){
out();
in();
}
}
有待補充.......
2022-10-09 17:07:42
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/511924.html
標籤:其他
上一篇:C++ 如何讀取亂碼檔案內容?
下一篇:垃圾回收
