java基礎-文件與IO 以下內容為本人的學習筆記,如需要轉載,請聲明原文鏈接 https://www.cnblogs.com/lyh1024/p/16772853.html IO是一個龐大的體系,信息傳遞的通道靠IO,例如:文件讀寫、上傳下載、網路通信等都要用到。 1.File類的基本概念 Fil ...
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