java 操作檔案File類
阿新 • • 發佈:2019-02-02
File物件可以作為引數傳遞給流的建構函式。
</pre></div><div></div><h2>File 類的常用的方法。</h2><div><pre name="code" class="java">import java.io.*; /*File類的常見方法 1.建立。 boolean createNewFile(); boolean mkdir();建立資料夾 boolean mkdirs();建立多級資料夾。 2.刪除。 boolean delete(); void deleteOnExit();在程式退出時刪除檔案。 3.判斷。 boolean canExcute(); 判斷是否可執行 boolean exists(); 檔案事是否存在。 isFile();檔案 isDirectory();資料夾 isHidden();//java能得到檔案中的隱藏檔案但是對隱藏檔案時不能訪問的 isAbsolute();//絕對路徑即時不存在也能得到。 4.獲取資訊。 getName(); getPath(); getParent(); getAbsolutePath(); long lastModified(); long length(); */ public class FileDemo { /** * @param args */ public static void main(String[] args)throws IOException { // TODO Auto-generated method stub method_4(); } public static void method_1() throws IOException{ File f= new File("d:\\file.txt"); f.deleteOnExit();//告訴程式當程式結束時才刪除f關聯的檔案 即使發生異常也不受影響 //System.out.println("creat:"+f.createNewFile()); System.out.println("delete:"+f.delete()); } public static void method_2(){ File f = new File("file.txt"); // System.out.println("execute:"+f.canExecute()); // System.out.println("exists:"+f.exists()); //建立資料夾 File dir = new File("d:\\abc"); File dirs = new File("d:\\abc\\a\\b\\c"); System.out.println("dir:"+dir.mkdir()); System.out.println("dirs:"+dirs.mkdirs()); } public static void method_3(){ File f = new File("file.txt"); System.out.println("path:"+f.getPath()); System.out.println("absolutePath:"+f.getAbsolutePath()); System.out.println("parentpath:"+f.getParent());//該方法返回的是絕對路徑中檔案的父目錄。如獲取的是相對路徑返回的是null。 // 如果相對路徑中有上一層目錄那麼該目錄就是返回結果。 } public static void method_4(){ File f1= new File("d:\\a.txt"); File f2= new File("haha.txt"); System.out.println(f2.renameTo(f1));//類似於剪下功能 } public static void consMethod(){ //將a.txt封裝成file物件,可以將已有的和為出現的檔案或者資料夾封裝為物件。 File f1 = new File("d:\\a.txt"); File f2 = new File("d:\\abc","b.txt"); File d = new File("d:\\abc"); File f3= new File(d,"a.txt"); System.out.println("f1:"+f1); System.out.println("f2:"+f2); System.out.println("f3:"+f3); //跨平臺分隔符<span style="font-family: Arial, Helvetica, sans-serif;">File.separator</span> File f4 = new File("d:"+File.separator+"abc"+File.separator+"a.txt"); System.out.println("f4:"+f4); } }
獲取系統根目錄例子
import java.io.*; public class FileDemo2 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub listDemo(); } public static void listDemo(){ File f = new File("d:\\"); String[] names= f.list();//呼叫list方法的物件必須封裝一個目錄,封裝檔案返回為null for(String name : names){ System.out.println(name); } } public static void listRootsDemo(){ File[] files=File.listRoots(); for(File f: files) { System.out.println(f); } } }
遞迴輸出檔案列表
import java.io.*; /* 列出指定目錄下的檔案或資料夾,包含子目錄中的內容。 也就是列出指定目錄下所有內容。 遞迴注意 1 注意要有結束 2 要注意遞迴的次數 防止記憶體溢位 */ public class FileDemo3 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub File f= new File("d:\\u盤備份"); showDir(f,0); //System.out.println(getSum(10)); } public static String getLevel(int level) { StringBuilder sb= new StringBuilder(); for(int i=0; i<level;i++){ sb.append(" "); } sb.append("|--"); return sb.toString(); } public static void showDir(File dir ,int level) { System.out.println(getLevel(level)+dir.getName()); level++; File[] files= dir.listFiles(); for(int i=0;i<files.length;i++) { if(files[i].isDirectory()) showDir(files[i],level); else System.out.println(getLevel(level)+files[i]); } } //補充:遞迴方法求和 public static int getSum(int num){ if(num==1) return 1; else return num+getSum(--num); } }
刪除資料夾例項
import java.io.*;
/*
* 刪除資料夾要先刪除裡邊的檔案。因此就要用到遞迴了
* 從裡往外刪除檔案
*
*/
public class FileRemoveDir {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
File file= new File("d:\\abc");
removeDir(file);
}
public static void removeDir(File dir)
{
File[] files =dir.listFiles();
for(int i=0;i<files.length;i++)
{
if(files[i].isDirectory())
{
removeDir(files[i]);
}else
System.out.println(files[i].toString()+"file:"+files[i].delete());
}
System.out.println(dir+"dir:"+dir.delete());
}
}
查詢資料夾指定型別儲存在檔案中
import java.io.*;
import java.util.*;
/*
將一個指定目錄下的java檔案的絕對路徑,儲存到一個檔案中。
建立一個java檔案列表清單。
思路:
1.對指定的目錄進行遞迴。
2.獲取遞迴過程所有的java檔案的路徑。
3.將這些路徑儲存到集合中。
4.將集合中的資料寫入到一箇中。
* */
public class JavaFileList {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
File dir = new File("d:\\u盤備份");
List<File> list= new ArrayList<File>();
fileToList(dir,list);
File f =new File("javaList.txt");
writeToFile(list,f);
}
public static void fileToList(File dir,List<File> list)
{
File[] files = dir.listFiles();
for (File file : files){
if(file.isDirectory())
{
fileToList(file,list);
}
else
{
if(file.getName().endsWith(".java"))
list.add(file);
}
}
}
public static void writeToFile(List<File> List, File f) throws IOException
{
BufferedWriter bw= new BufferedWriter(new FileWriter(f));
try{
for(File file: List)
{
String path= file.getAbsolutePath();
bw.write(path);
bw.newLine();
bw.flush();
}
}catch(Exception e){
throw new RuntimeException("失敗!");
}
finally{
try{
if(bw!=null)
bw.close();
}catch(Exception ex){
throw new RuntimeException("關閉失敗!");
}
}
}
}
Propreties與流關聯的集合類HashTable的子類
import java.io.*;
import java.util.*;
public class PropertiesDemo {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//setAndget();
//method_1();
loadDemo();
}
//load方法進行檔案的集合載入。
public static void loadDemo() throws IOException
{
FileInputStream fis= new FileInputStream("info.txt");
Properties prop= new Properties();
prop.load(fis);
prop.list(System.out);
prop.setProperty("wangwu","25");
FileOutputStream fos= new FileOutputStream("info.txt");
prop.store(fos, "haha");
}
//將info.txt中的鍵值資料存到集合中進行操作。
/*步驟:
1.用一個流和info.txt檔案關聯。
2.讀取一行資料,將該資料用"="進行切割。
3.等號左邊為建,右邊衛值。存入Porperties集合中即可.
*/
public static void method_1() throws IOException
{
BufferedReader br= new BufferedReader(new FileReader("info.txt"));
String line=null;
Properties prop= new Properties();
while((line=br.readLine())!=null)
{
String[] s=line.split("=");
prop.setProperty(s[0], s[1]);
}
System.out.println(prop);
}
//設定和獲取元素
public static void setAndget()
{
Properties prop = new Properties();
prop.setProperty("zhangsan", "34");
prop.setProperty("lisi", "22");
System.out.println(prop);
String value =prop.getProperty("zhangsan");
System.out.println(value);
Set<String> names = prop.stringPropertyNames();
for(String name:names)
{
System.out.println(prop.getProperty(name));
}
}
}
Properties實現程式的使用次數限制
/*用於記錄應用程式的次數。
如果使用次數已到,那麼給出註冊資訊。
思路:
通過Properties屬性檔案將使用次數的屬性存在此檔案中,每次使用一次將計數
屬性修改並重新存到屬性檔案中,此操作就要借用Properties物件進行操作。
屬性檔案用於鍵值對的儲存方式。
這樣便於對資料操作。
鍵值對是map集合
資料是以檔案的形式儲存,使用io資料。
*/
import java.io.*;
import java.util.*;
public class PropertiesCount {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
Properties prop = new Properties();
File file= new File("count.ini");
if(!file.exists())
file.createNewFile();
FileInputStream fis = new FileInputStream(file);
prop.load(fis);
int count=0;
String value= prop.getProperty("time");
if(value!=null)
{
count =Integer.parseInt(value);
if(count>=5)
{
System.out.println("您好,使用次數已到請付費");
return;
}
}
count++;
prop.setProperty("time",count+"");
FileOutputStream fos = new FileOutputStream(file);
prop.store(fos,"haha");
}
}
PrintStream與PrintWriter 列印流的用法
/*列印流
為了方便各種資料型別的原樣列印。
位元組列印流
PrintStream
可以接收的引數型別
1.file物件 File
2.字串路徑。String
3.位元組輸出流 OutputStream
PrintWriter
可以接收的引數型別
1.file物件 File
2.字串路徑。String
3.位元組輸出流 OutputStream
4.字元輸出流 Writer
*/
import java.io.*;
public class PrintStreamDemo {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader bufr=
new BufferedReader(new InputStreamReader(System.in));
PrintWriter out = new PrintWriter(System.out);
String line = null;
while((line=bufr.readLine())!=null)
{
out.println(line.toUpperCase());
out.flush();
}
out.close();
bufr.close();<pre name="code" class="java">
}}
DataInputStream和DataOutputStream 基本資料操作流
import java.io.*;
/*
DataStream類主要用於操作基本資料型別的流的讀取和寫入
*/
public class DataInputStreamDemo {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
//writeData();
//readData();
writeUTFDemo();
}
public static void writeUTFDemo() throws IOException
{
DataOutputStream dos =
new DataOutputStream(new FileOutputStream("data.txt"));
dos.writeUTF("你好");
dos.close();
}
public static void readData() throws Exception
{
DataInputStream dis = new DataInputStream(new FileInputStream("data.txt"));
int num =dis.readInt();
boolean b= dis.readBoolean();
double d= dis.readDouble();
System.out.println("num:"+num);
System.out.println("b:"+b);
System.out.println("d:"+d);
}
public static void writeData() throws IOException
{
DataOutputStream dos =
new DataOutputStream(new FileOutputStream("data.txt"));
dos.writeInt(234);
dos.writeBoolean(true);
dos.writeDouble(444.456);
dos.close();
}
}