第一講 File類java
1、概述linux
一、File類:文件和目錄路徑名的抽象表現形式編程
二、特色:windows
1)用來將文件或文件夾封裝成對象數組
2)方便於對文件與文件夾的屬性信息進行操做app
3)File類的實例是不可變的;也就是說,一旦建立,File 對象表示的抽象路徑名將永不改變函數
4)File對象能夠做爲參數傳遞給流的構造函數ui
2、File對象建立spa
方式一: 對象
File f =new File("a.txt");
將a.txt封裝成File對象。能夠將已有的和未出現的文件或者文件夾封裝成對象。
方式二:
File f2=newFile("c:\\abc","b.txt");
將文件所在目錄路徑和文件一塊兒傳入,指定文件路徑。
方式三:
File d=new File("c:\\abc");
File f3=new File(d,"c.txt");
將文件目錄路徑封裝成對象。再建立文件對象。下降了文件於父目錄的關聯性。
小知識:
File.separator表示目錄分隔符,能夠跨平臺使用。至關於路徑中的「\」(雙斜槓\\在windows中表示表示轉義後的分隔符,可是在linux系統中就不是)。
3、File類的常見方法
一、建立
booleancreateNewFile();
//在指定位置建立文件,若是該文件已經存在,則不建立,返回false。和輸出流不同,輸出流對象一創建就建立文件。並且文件已經存在,會覆蓋。
boolean mkdir();//建立文件夾,只能建立一級文件夾
例:
File dir=new File("abc");
dir.mkdir();//建立abc這個文件夾
boolean mkdirs();//建立多級文件夾
二、刪除
boolean delete();
//刪除文件或目錄。文件存在,返回true;文件不存在或者正在被執行,返回false。
void deleteOnExit();//在程序退出時刪除指定文件
三、判斷
boolean canExecute();//是不是可執行文件
boolean exists();//文件是否存在
boolean isFile();//是不是文件
boolean isDirectory();//是不是文件夾
boolean isHidden();//是不是隱藏文件
boolean isAbsolute();//文件是不是絕對路徑
記住:在判斷文件對象是不是文件或者目錄時,必需要判斷該文件對象封裝的內容是否存在。經過exists判斷。
四、獲取信息
String getName();//獲取文件名
String getPath();
//獲取文件的相對路徑(即建立的對象傳入的參數是什麼就獲取到什麼)
String getParent();
//獲取文件父目錄。返回的是絕對路徑中的父目錄。若是獲取的是相對路徑,返回null。若是相對路徑中有上一層目錄,那麼該目錄就是返回結果。
String getAbsolutePath();//獲取文件的絕對路徑
long lastModified();//返回文件最後一次被修改的時間
long length();//返回文件長度
五、列出文件及文件過濾
static File[] listRoots();//列出可用的文件系統根目錄,即系統盤符
String[] list();
//列出當前目錄下全部文件,包括隱藏。調用list方法的file對象必須是封裝了一個目錄。該目錄還必須存在。
String[]list(FilenameFilter filter);
//返回一個字符串數組,獲取目錄中知足指定過濾器的文件或目錄。
//FilenameFilter:文件名過濾器,是一個接口,其中包含一個方法,accept(Filedir,String name),返回的是boolean型,對不符合條件的文件過濾掉。
File[] listFiles();//返回一個抽象路徑名數組,獲取當前文件夾下的全部文件和文件夾
File[] ListFiles(FilenameFilterfilter);//返回抽象路徑名數組,獲取目錄中知足指定過濾器的文件或目錄。
- <span style="font-size:14px;">
-
- import java.io.*;
- class GetJavaFile
- {
- public static void main(String[] args)
- {
- File file=new File("E:\\Java Study\\Practice\\day07");
- getJavaFile(file);
- }
-
- public static void getJavaFile(File dir)
- {
-
- String[] javaFile=dir.list(new FilenameFilter()
- {
- public boolean accept(File dir,String name)
- {
- return name.endsWith(".java");
- }
- });
-
- System.out.println("len:"+javaFile.length);
-
- for (String s : javaFile )
- {
- System.out.println(s);
- }
- }
- }
- </span>
4、遞歸
一、定義
當函數內每一次循環還能夠調用本功能來實現,也就是函數自身調用自身。這種表現形式,或者編程手法,稱爲遞歸。
二、遞歸注意事項
a、限定條件。是來結束循環調用,不然是死循環。
b、注意遞歸的次數,儘可能避免內存溢出。由於每次調用自身的時候都會先執行下一次調用本身的方法,因此會不斷在棧內存中開闢新空間,次數過多,會致使內存溢出。
示例一
- import java.io.*;
- class RecursionDemo
- {
- public static void main(String[] args)
- {
-
- File dir=new File("e:\\Java Study\\Practice");
-
-
- allFileList(dir,0);
- }
-
-
- public static void allFileList(File dir,int level)
- {
-
- System.out.println(getLevel(level)+dir);
- level++;
- File[] fileArr=dir.listFiles();
-
-
- for (File file : fileArr)
- {
- if(file.isDirectory())
- {
-
- allFileList(file,level);
- }
- else
- System.out.println(getLevel(level)+file);
- }
- }
-
-
- public static String getLevel(int level)
- {
- StringBuilder sb=new StringBuilder();
- sb.append("|--");
-
- for (int x=level;x>0 ; x--)
- {
-
- sb.insert(0,"| ");
- }
- return sb.toString();
- }
- }
示例二
- import java.io.*;
- class RemoveDir
- {
- public static void main(String[] args)
- {
-
- File dir=new File("e:\\1");
-
- removeDir(dir);
-
- }
-
-
- public static void removeDir(File dir)
- {
- File[] files=dir.listFiles();
-
- for (File file : files )
- {
-
- if(!file.isHidden()&&file.isDirectory())
- removeDir(file);
- else
- System.out.println(file.toString()+":-file-:"+file.delete());
- }
- System.out.println(dir+":::dir:::"+dir.delete());
- }
- }
示例三
- import java.util.*;
- import java.io.*;
-
- class JavaFileList
- {
- public static void main(String[] args)
- {
-
- File dir=new File("e:/Java Study/Practice");
-
-
- List<File> list =new ArrayList<File>();
-
-
- fileToList(dir,list);
-
-
- File file=new File(dir,"javafilelist.txt");
-
- writeToFile(list,file);
-
- }
-
- public static void fileToList(File dir,List<File> list)
- {
- File[] files=dir.listFiles();
-
- for (File file : files)
- {
-
- if(file.isDirectory())
- {
- list.add(file.getAbsoluteFile());
- fileToList(file,list);
- }
-
- else if(file.getName().endsWith(".java"))
- list.add(file);
- }
- }
-
-
- public static void writeToFile(List<File> list,File file)
- {
-
- BufferedWriter bw=null;
-
- try
- {
- bw=new BufferedWriter(new FileWriter(file));
- for (File file0 : list )
- {
- bw.write(file0.getAbsolutePath());
- bw.newLine();
- bw.flush();
- }
- }
- catch (IOException e)
- {
- throw new RuntimeException("寫入文件失敗");
- }
- finally
- {
- try
- {
- if(bw!=null)
- bw.close();
- }
- catch (IOException e)
- {
- throw new RuntimeException("流資源關閉失敗");
- }
- }
- }
- }
第二講 Properties類
1、概述
一、Properties是Hashtable的子類,它具有Map集合的特色。並且它裏面還有存儲的鍵值對,都是字符串,無泛型定義。是集合中和IO技術想結合的集合容器。
二、特色:
1)可用於鍵值對形式的配置文件
2)在加載時,須要數據有固定的格式,經常使用的是:鍵=值
2、特有方法
一、設置
Object setProperty(String key,String value);
//設置鍵和值,調用Hashtable的方法put
二、獲取
String getProperty(String key);
//指定key搜索value
Set<String> stringPropertyName();
//返回屬性列表的鍵集,存入Set集合
三、加載流和存入流
void load(InputStream ism);
//從輸入字節流中讀取屬性列表(鍵和元素對)。又稱將流中的數據加載進集合。
void load(Readerreader);
//從輸入字符流中讀取屬性列表(鍵和元素對)。又稱將流中的數據加載進集合。
voidlist(PrintStream out);//將屬性列表輸出到指定的輸出流
void store(OutputStreamout,String comments);
//對應load(InputStream )將屬性列表(鍵值對)寫入輸出流。comments屬性列表的描述。
void store(Writerwriter, String comments);
//對應load(Reader)將屬性列表(鍵值對)寫入輸出流。comments屬性列表的描述。
示例
-
-
-
- public static void method()throws IOException
- {
-
- BufferedReader bufr = new BufferedReader(new FileReader("info.txt"));
-
- String line = null;
-
- Properties prop = new Properties();
-
- while((line=bufr.readLine())!=null)
- {
- String[] arr = line.split("=");
-
- prop.setProperty(arr[0],arr[1]);
- }
-
- bufr.close();
-
- System.out.println(prop);
- }
練習:
- import java.util.*;
- import java.io.*;
-
- class RunCount
- {
- public static void main(String[] args)throws IOException
- {
- int count=runCount();
- if(count>5)
- {
- System.out.println("次數到了,交錢!!!!!");
- return ;
- }
- else
- System.out.println("程序第"+count+"次Run!");
- }
-
- public static int runCount()throws IOException
- {
- Properties ps=new Properties();
-
- File file=new File("info.ini");
- if(!file.exists())
- file.createNewFile();
- FileReader fr=new FileReader(file);
-
- ps.load(fr);
-
- int count=0;
- String value=ps.getProperty("time");
-
- if(value!=null)
- {
- count=Integer.parseInt(value);
- }
- count++;
- ps.setProperty("time",count+"");
-
- FileWriter fw=new FileWriter(file);
- ps.store(fw,"");
-
- fr.close();
- fw.close();
-
- return count;
- }
- }
第三講 打印流
1、概述
一、打印流包括:PrintStream和PrintWriter
二、該流提供了打印方法,可將各類類型的數據都原樣打印。
2、字節打印流:PrintStream
構造方法中可接收的參數類型:
一、File對象。File
二、字符串路徑:String
三、字符輸出流:OutputStream
3、字符串打印流:PrintWriter
構造方法中可接受的參數類型
一、File對象:File
二、字符串路徑:String
三、字節輸出流:OutputStream
四、字符輸出流:Writer
示例
- import java.io.*;
-
- class PrintStreamDemo
- {
- public static void main(String[] args) throws IOException
- {
-
- BufferedReader bufr =
- new BufferedReader(new InputStreamReader(System.in));
-
-
- PrintWriter out = new PrintWriter(new FileWriter("a.txt"),true);
-
- String line = null;
-
- while((line=bufr.readLine())!=null)
- {
- if("over".equals(line))
- break;
- out.println(line.toUpperCase());
-
- }
-
-
- out.close();
- bufr.close();
-
- }
- }
第四講 序列流
1、概述
一、SequenceInputStream對多個流進行合併。也被稱爲合併流。
二、經常使用構造函數
SequenceInputStream(Enumeration<?extends FileInputStream> e)
2、常見合併多個流文件步驟
一、建立集合,並將流對象添加進集合
二、建立Enumeration對象,將集合元素加入。
三、建立SequenceInputStream對象,合併流對象淘寶開店
四、建立寫入流對象,FileOutputStream關聯寫入文件
五、利用SequenceInputStream對象和FileOutputStream對象讀數據進行反覆讀寫操做。
示例:
- import java.util.*;
- import java.io.*;
-
- class SequenceInputStreamDemo
- {
- public static void main(String[] args)throws IOException
- {
- Vector<InputStream> ve=new Vector<InputStream>();
- ve.add(new FileInputStream("1.txt"));
- ve.add(new FileInputStream("2.txt"));
- ve.add(new FileInputStream("3.txt"));
-
- Enumeration<InputStream> en=ve.elements();
- SequenceInputStream sis=new SequenceInputStream(en);
-
- FileOutputStream fos=new FileOutputStream("4.txt");
-
-
- byte[] buf=new byte[1024];
- int len=0;
- while((len=sis.read(buf))!=-1)
- {
- fos.write(buf,0,len);
- }
-
-
- fos.close();
- sis.close();
- }
- }
練習:
- import java.util.*;
- import java.io.*;
-
- class SplitFile
- {
- public static void main(String[] args) throws IOException
- {
-
- File file=new File("C:\\Users\\asus\\Desktop\\蘇芮 - 同樣的月光.mp3");
-
- splitFile(file);
-
-
- File file1=new File("E:\\Java Study\\Practice\\day20\\splitFile\\同樣的月光.mp3");
-
- merge(file1);
-
- }
-
- public static void splitFile(File file)throws IOException
- {
-
- BufferedInputStream bis=new BufferedInputStream(new FileInputStream(file));
-
- BufferedOutputStream bos=null;
-
-
- byte[] buf=new byte[1024*1024];
- int len=0,x=0;
- while ((len=bis.read(buf))!=-1)
- {
-
- bos=new BufferedOutputStream(new FileOutputStream("E:\\Java Study\\Practice\\day20\\splitFile\\"+(++x)+".part"));
- bos.write(buf,0,len);
- bos.close();
- }
-
- bis.close();
- }
-
-
- public static void merge(File file)throws IOException
- {
-
- ArrayList<FileInputStream> al=new ArrayList<FileInputStream>();
-
- for (int x=1;x<=6 ; x++)
- {
- al.add(new FileInputStream("E:\\Java Study\\Practice\\day20\\splitFile\\"+x+".part"));
- }
-
-
- final ListIterator<FileInputStream> it=al.listIterator();
- Enumeration<FileInputStream> en=new Enumeration<FileInputStream>()
- {
- public boolean hasMoreElements()
- {
- return it.hasNext();
- }
-
- public FileInputStream nextElement()
- {
- return it.next();
- }
- };
-
-
- SequenceInputStream sis=new SequenceInputStream(en);
-
-
- FileOutputStream fos=new FileOutputStream(file);
-
-
- byte[] buf=new byte[1024];
- int len=0;
- while((len=sis.read(buf))!=-1)
- {
- fos.write(buf,0,len);
- }
-
-
- fos.close();
- sis.close();
-
- }
-
- }