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();
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();
}
}
}