java本地文件与文件夹

1文件

import java.io.File;
public class Operation{
	public static void main(String args[]){
		File file=new File("hello.txt");
		if(file.exists()){
			//是否是文件
			System.out.println(file.isFile());
			//路径(是否是文件夹)
			System.out.println(file.isDirectory());
			
		}
		else{
			System.out.println("文件不存在");
			try{
				file.createNewFile("hello.txt");
				System.out.println("文件成功创建");
			}
			catch (IOException e)  {
				e.printS
				System.out.println("文件无法创建");
			}
		}
	
	}
	
} 以上是文件的创建

获取文件名getName()

文件路径file.getPath();

文件绝对路径 file.getAbsolutePath();

获取父级路径 file.getParent()

获取相对路径文件的父级路径 new File(file,getAbsolutePath(),getParent())

读取文件大小:fille.length()/1024+"byte"//在硬盘上是1000,整形与整形相除得整形,变为FLOAT即可,(float)fille.length()/1024+"byte

判断文件是否被隐藏:file.isHIdden()

是否可读:canRead();

是否可写:canWrite();



2.文件夹

import java.io.File;
public class Operation{
	public static void main(String args[]){
		/* File folder=new File("my new folder/one/two/three/main");
		if(folder.mkdir()){
			// if(foler.mkdirs()三级以上文件夹创建
			System.out.println("文件夹创建完成");	
		}
		else{
			System.out.println("文件不存在");
			
		} */
		File folder=new File("my new folder");
		File newfolder =new File("my new folder-new");
		if(folder.renameTo(newfolder)){
			System.out.println("done");
		}
		else{
			System.out.println("fail");
		}
	
	}
	
} 以上是文件夹的创建,重命名
遍历文件夹,打印文件的目录,有层级打印,是文件夹的递归打印下级,是文件的仅打印文件名。

import java.io.File;
public class Operation{
	public static void main(String args[]){
		printFile(new File("/code/java/"),1);
	
	}
	public static void printFile(File dir,int tab){
		if(dir.isDirectory()){
			File list[]=dir.listFiles();
			for(int i=0;i<list.length;i++){
				for(int j=0;j<tab;j++)
				{
					System.out.print("---");
				}
				System.out.println(list[i].getName());
				if(list[i].isDirectory())
				{
					printFile(list[i],tab+1);
				}
				
			}
		}
	}
	
} 

接下来我们对文件进行操作,程序中的输入输出都是以流的形式保存的,流中保存的实际上全都是字节文件一个字符由两个字节组成,字符流处理的是两个字节的Unicode字符。所以字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,所以它对多国语言支持性比较好!如果是音频文件、图片、歌曲,就用字节流好点,如果是关系到中文(文本)的,用字符流好点。

IO操作流程

1.使用File类打开一个文件;

2.通过字节流或字符流的子类指定输出位置。

3.进行读/写操作;

4.关闭输入/输出;

字节流可以将文本里面的数据读入到本地中,可以将本地的字符串写入到文件中。

   流的操作用到装饰模式,一层一层包装。比如将字节流包装成字符流。BufferedReader涉及到一个缓冲区大小,把读到的数据放进缓冲区就避免了一个一个字符的读出方式。

例一:

//字节流读取,写出数据
import java.io.FileOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
 public class Operation{
	 public static void main(String args[]){
		 /*  try{FileInputStream input=new FileInputStream("test.txt");
		 byte b[]=new byte[20];
		 input.read(b);
		 String s=new String(b,"gbk");
		 System.out.println(s);
		 } */
		 	
	 
	  try{
		  FileOutputStream fos=new FileOutputStream("newtest.txt");//如果没有newtest.txt文件系统会自动创建一个文件
		  String outSring="I am not happy";
		  byte output[]=outSring.getBytes("gbk");//将字符串写入本地的字节数组
		  fos.write(output);
		  fos.close();   //用完后要将流关闭
		  
		  
	  }
	  catch(FileNotFoundException e){
				e.printStackTrace();
			}
	   catch(IOException e){
				e.printStackTrace();
			}
	 }
		 
 }

例二:

带缓冲区的文件拷贝,运行速率快多了

import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
 public class Operation{
	 public static void main(String args[]){
		try{
			FileInputStream fis=new FileInputStream("image01.gif");
			BufferedInputStream bis=new BufferedInputStream(fis);
			FileOutputStream fos=new FileOutputStream("image02.gif");
			BufferedOutputStream bos=new BufferedOutputStream(fos);
			byte[] input=new byte[50];//文件209,510 字节,这里字节数组是不能完全读出文件的;
			//int len=bis.read(input);//查看read函数,知道它返回的是一个整数,是input数组的长度,如果返回的为-1就代表没有数据
			int count=0;
			long time=System.currentTimeMillis();
			int len;
			while(( len=bis.read(input))!= -1)
			{
				count++;
				//bos.write(input);//每次读50个字节长度的字节数组,不足50个也是读50个字节,读进去一些空字符,就导致文件打不开
				fos.write(input, 0, len);//当它读到不足50个字节时就写他自己读到的长度
			}
			System.out.println(count+"次");
			bos.close();
			fos.close();
			bis.close();
			fis.close();
			
				System.out.println((System.currentTimeMillis()-time)+"ms");
			System.out.println("done");
			
		}
		catch(FileNotFoundException e){
			e.printStackTrace();
		}
		catch(IOException e){
			e.printStackTrace();
		}
		
		
	 }
		 
 }
 
 
 

这里
System.currentTimeMillis()返回是一个long型,写为整形就要报错



例三 字节转字符操作文件

import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.InputStreamReader;
import java.io.File;
 public class Operation{
	 public static void main(String args[]){
		try{
			File file =new File("test.txt"); 
			FileInputStream fis=new FileInputStream(file);
			InputStreamReader isr =new InputStreamReader(fis,"GBK");//接受字节转字符
			char input[]=new char[100];
			int l=0;
			while ((l=isr.read(input)) != -1)
			{
				System.out.println(new String(input,0,l));
			}
			isr.close();
			fis.close();
		}
		catch(FileNotFoundException e){
			e.printStackTrace();
		}
		catch(IOException e){
			e.printStackTrace();
		}
		
		
	 }
		 
 }
 
 
例四 用FileReader和FileWriter读取文本文件,拷贝文件


import java.io.FileReader;
import java.io.FileWriter;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.BufferedWriter;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.File;
 public class Operation{
	 public static void main(String args[]){
		try{
			FileReader fr=new FileReader("test.txt");//读取文件文本数据
			BufferedReader br=new BufferedReader(fr);
			FileWriter fw=new FileWriter("java_new.txt");
			BufferedWriter bw=new BufferedWriter(fw);
			String line;
			while((line = br.readLine()) != null){
				bw.write(line);
			}
			bw.close();
			fw.close();
			br.close();
			fr.close();
			
		}
		catch(FileNotFoundException e){
			e.printStackTrace();
		}
		catch(IOException e){
			e.printStackTrace();
		}
		
		
	 }
		 
 }
 
 





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值