Java之IO详解(一):

【案例1】:

package Main;
import java.io.File;
import java.io.IOException;

public class Hello {
    public static void main(String[] args)
    {
        File file=new File("D:\\hello.txt");//在D盘中创建一个hello.txt文件,同时也可以定义为d:\\hello.txt
        try{
        file.createNewFile();
        }catch(Exception ex)
        {
            ex.printStackTrace();
        }

    }
}

【运行结果】:
在D盘中会生成一个hello.txt文件,若在D盘中已经存在hello.txt文件,则运行没有任何结果!

======================================================================================

【案例2】File类的两个常量

package Main;
import java.io.*;  
public class hello{  
    public static void main(String[] args) {  
        System.out.println(File.separator);//windows下直接可以用/进行分割,但是这个在Liunx下就不行了,
                                           //所以为了能够使我们的代码的兼容性更强,还是尽量使用这两个常量
        System.out.println(File.pathSeparator);  
     }  
 } 

【运行结果】:
\
;

======================================================================================

【案例3】

package Main;
import java.io.File;
import java.io.IOException;
public class Hello {
    public static void main(String[] args)     
    {   
        String fileName="D:"+File.separator+"hello.txt";
        File file=new File(fileName);
        try{
        file.createNewFile();
        }catch(Exception ex)
        {
            ex.printStackTrace();
        }

    }
}

【运行结果】:
与案例一结果一样

======================================================================================

【案例4】删除文件

package Main;
import java.io.File;
import java.io.IOException;
public class Hello {
    public static void main(String[] args)     
    {   
        String fileName="D:"+File.separator+"hello.txt";
        File file=new File(fileName);
        if(file.exists())
        {
            file.delete();
        }else{
            System.out.println("文件不存在");
        }
    }
}

【运行结果】:
D盘下的hello.txt文件被删除

======================================================================================

【案例5】列出指定目录的全部文件

package Main;
import java.io.File;
import java.io.IOException;
public class Hello {
    public static void main(String[] args)     
    {   
        String fileName="D:"+File.separator+"hello";
        File file=new File(fileName);
        String[] str=file.list();//但是使用list返回的是String数组。而且列出的不是完整路径,如果想列出完整路径的话,需要使用listFiles.他返回的是File的数组
        for(int i=0;i<=str.length-1;i++)
            System.out.println(str[i]);
    }
}

【运行结果】:
run:
项目1
项目1 - 副本
项目1 - 副本 (10)
项目1 - 副本 (2)
项目1 - 副本 (3)
项目1 - 副本 (4)
项目1 - 副本 (5)
项目1 - 副本 (6)
项目1 - 副本 (7)
项目1 - 副本 (8)
项目1 - 副本 (9)
成功构建 (总时间: 1 秒)

======================================================================================

【案例6】列出指定目录的全部文件(列出的是完整的路径)

package Main;
import java.io.File;
import java.io.IOException;
public class Hello {
    public static void main(String[] args)     
    {   
        String fileName="D:"+File.separator+"hello";
        File file=new File(fileName);
        File[] str=file.listFiles();
        for(int i=0;i<=str.length-1;i++)
            System.out.println(str[i]);
    }
}

【运行结果】:
run:
D:\hello\项目1
D:\hello\项目1 - 副本
D:\hello\项目1 - 副本 (10)
D:\hello\项目1 - 副本 (2)
D:\hello\项目1 - 副本 (3)
D:\hello\项目1 - 副本 (4)
D:\hello\项目1 - 副本 (5)
D:\hello\项目1 - 副本 (6)
D:\hello\项目1 - 副本 (7)
D:\hello\项目1 - 副本 (8)
D:\hello\项目1 - 副本 (9)
成功构建 (总时间: 1 秒)

======================================================================================

【案例7】使用isDirectory判断一个指定的路径是否为package Main;
import java.io.File;
import java.io.IOException;
public class Hello {
public static void main(String[] args)
{
String fileName=”D:”+File.separator+”hello”+File.separator+”m.txt”;
// String fileName=”D:”+File.separator+”hello”+File.separator+”m”;
File file=new File(fileName);
if(file.isDirectory())
{
System.out.println(“是一个目录”);
}else System.out.println(“不是一个目录”);
}
}
【运行结果】:
如果是一个文件夹,则是一个目录,如果是如.txt等等则不是目录

=====================================================================================

【案例8】搜索指定目录的全部内容
package Main;
import java.io.File;
public class Hello{
public static void main(String[] args) {
String fileName=”D:”+File.separator+”hello”;
File f=new File(fileName);
print(f);
}
public static void print(File f){
if(f.isDirectory()){
File[] fileArray=f.listFiles();
for (int i = 0; i < fileArray.length; i++) {
print(fileArray[i]); //递归调用
}
}
else System.out.println(f);
}
}
【运行结果】:
run:
D:\hello\m.txt
D:\hello\项目1\历史\历史.txt
D:\hello\项目1 - 副本 (8)\新建文本文档.txt
成功构建 (总时间: 1 秒)

=====================================================================================

【案例9】向文件中写入字符串(字节流)

package Main;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Hello{  
     public static void main(String[] args) throws IOException {
         String fileName="D:"+File.separator+"hello"+File.separator+"m.txt";
         File file=new File(fileName);
         try (FileOutputStream output = new FileOutputStream(file)) {
             String str="你好";
             byte[] b=str.getBytes();
             output.write(b);
             output.close();
         }
      }  
 }

【运行结果】:
在m.txt中会看到”你好”。
注:如果原本hello文件中并没有m.txt文件,那么会自动生成!
注:如果原本并没有文件,那么会出现运行错误,java会显示系统找不到指定的路径。

======================================================================================

【案例10】向文件中写入字符串(字节流)

package Main;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class Hello{  
     public static void main(String[] args) throws IOException {
         String fileName="D:"+File.separator+"hello"+File.separator+"m.txt";
         File file=new File(fileName);

//          FileOutputStream output = new FileOutputStream(file) ;
//             String str="你好";
//             byte[] b=str.getBytes();
//             for(int i=0;i<=b.length-1;i++)
//             {
//                 output.write(b[i]);
//             }
//             output.close();一定要去关闭文件

//或者转化为Try-with-resourses

 try (FileOutputStream output = new FileOutputStream(file)) {
             String str="你好";
             byte[] b=str.getBytes();
             for(int i=0;i<=b.length-1;i++)
             {
                 output.write(b[i]);
             }
         }

      }  
 }

【运行结果】:
在m.txt中会看到”你好”。
注:如果原本hello文件中并没有m.txt文件,那么会自动生成!
注:如果原本并没有文件,那么会出现运行错误,java会显示系统找不到指定的路径。

======================================================================================

【案例11】向文件追加新内容

package Main;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class Hello{  
     public static void main(String[] args) throws IOException {
         String fileName="D:"+File.separator+"hello"+File.separator+"m.txt";
         File file=new File(fileName);
         try (FileOutputStream output = new FileOutputStream(file,true)) {   //设置为true以后则可添加新内容,否则是覆盖原来的内容
             String str="天天开心";
             //String str="\r\n天天开心";  //换行
             byte[] b=str.getBytes();
             for(int i=0;i<=b.length-1;i++)
             {
                 output.write(b[i]);
             }
         }
     }
 }

【运行结果】
在m.txt中添加了新内容”天天开心”

======================================================================================

【案例12】读文件内容(字节流)

package Main;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class Hello{  
     public static void main(String[] args) throws IOException {
         String fileName="D:"+File.separator+"hello"+File.separator+"m.txt";
         File file=new File(fileName);
         byte[] b;
         try (FileInputStream input = new FileInputStream(file)) {
             b = new byte[1024];
             int count=0;
             int temp=0;
             while((temp=input.read())!=-1)
             {
                 b[count++]=(byte)temp;
             }
         }
         System.out.println(new String(b));
     }
 }

【运行结果】:
读出m.txt中的内容
注:当独到文件末尾的时候会返回-1.正常情况下是不会返回-1的

======================================================================================

【案例13】向文件中写入字符串(字符流)

package Main;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class Hello{  
     public static void main(String[] args) throws IOException {
         String fileName="D:"+File.separator+"hello"+File.separator+"m.txt";
         File file=new File(fileName);
         try (FileWriter output = new FileWriter(file)) {
             String str="helloworld";
             output.write(str);
         }
     }
 }

【运行结果】:
在m.txt中会看到helloworld
注:如果想在文件中追加新内容,可以声明FileWriter output = new FileWriter(file,true);
注:如果想换行,则是将字符串定义为”\r\nhelloworld”;

======================================================================================

【案例14】从文件中读出内容(字符流)
package Main;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class Hello{
public static void main(String[] args) throws IOException {
String fileName=”D:”+File.separator+”hello”+File.separator+”m.txt”;
File file=new File(fileName);
char[] ch=new char[100];
try (FileReader input= new FileReader(file)) {
int temp=0;
int count=0;
while((temp=input.read())!=-1)
{
ch[count++]=(char)temp;
}
System.out.println(“内容为:”+new String(ch,0,count));
}

 }

}
【运行结果】:
读出文件m.txt中的内容

======================================================================================

**关于字节流和字符流的区别
实际上字节流在操作的时候本身是不会用到缓冲区的,是文件本身的直接操作的,但是字符流在操作的 时候下后是会用到缓冲区的,是通过缓冲区来操作文件的。
读者可以试着将上面的字节流和字符流的程序的最后一行关闭文件的代码注释掉,然后运行程序看看。你就会发现使用字节流的话,文件中已经存在内容,但是使用字符流的时候,文件中还是没有内容的,这个时候就要刷新缓冲区。
使用字节流好还是字符流好呢?
答案是字节流。首先因为硬盘上的所有文件都是以字节的形式进行传输或者保存的,包括图片等内容。但是字符只是在内存中才会形成的,所以在开发中,字节流使用广泛。**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值