3月20号

一、File文件操作

 

1File类的基本操作方法

public static void main(String[] args) {

// File类:表示文件或目录的路径抽象表示形式

// IO: input/output 输入输出

// File file = new File("c:\\test\\moliying.txt");

// File file = new File(

// "c:"+File.separator+"test"+File.separator+"moliying.txt");

File file = new File("moliying.txt");

System.out.println(file);

// 判断文件是否存在

if (!file.exists()) {

System.out.println("文件不存在");

System.out.println("创建该文件...");

try {

// 创建文件

boolean b = file.createNewFile();

System.out.println("文件创建:" + b);

} catch (IOException e) {

e.printStackTrace();

}

}

 

// 检查File是文件或目录

System.out.println("是否是文件:" + file.isFile());

System.out.println("是否是目录:" + file.isDirectory());

// 获取全路径(绝对路径)

System.out.println("绝对路径=" + file.getAbsolutePath());

// 获取文件名:带扩展名

System.out.println("文件名:" + file.getName());

// 获取文件最后修改的时间

DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

System.out.println(df.format(new Date(file.lastModified())));

// 文件是否可读

System.out.println("是否可读:" + file.canRead());

// 文件是否可写

System.out.println("是否可写:" + file.canWrite());

// 文件是否为隐藏文件

System.out.println("是否是隐藏文件:" + file.isHidden());

// 相对路径

System.out.println("相对路径:" + file.getPath());

// 文件大小

System.out.println("文件大小:" + file.length());

 

File f2 = new File("c:\\test\\vince");

if (!f2.exists()) {

f2.mkdirs();// 创建多级目录

System.out.println("目录已创建");

}

 

File f3 = new File("c:\\test\\mly.txt");

if (f3.exists()) {

/*

if (f3.isFile()) {

f3.delete();

System.out.println("删除成功");

}

*/

//即可重命名,又可以实现移动文件

f3.renameTo(new File("c:\\moliying.txt"));

System.out.println("重命名成功");

}

 

//创建临时文件

/*

try {

File f4 = File.createTempFile("mly-", null);

System.out.println(f4.getAbsolutePath());

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

*/

}

 

2)文件搜索:请在指定文件目录中查找.jpg文件

findFile(new File("C:\\"),".jpg");

private static void findFile(File dir,String ext){

File target = dir;

if(target==null)return;

if(target.isDirectory()){

File[] fs = target.listFiles();

if(fs!=null){

for(File f:fs){

 findFile(f,ext);

}

}

}else{

String fileName = target.getName().toLowerCase();

if(fileName.endsWith(ext)){

System.out.println(target.getAbsolutePath());

}

}

}

 

二、字节流

IO 流是用于对文件内容进行操作

从数据类型划分,可以分为字节流和字符流

从数据流向划分,可以分为输出流和输入流

输出流:针对程序来说,把数据从程序输出到文件中

输入流:针对程序来说,把数据从文件输入到程序中

 

字节输出流:

OutputStream 字节输出流的父类

FileOutputStream 文件字节输出流

/**

 * 把字节输出到文件中

 */

public static void outputStream(){

//1要确定你要输出的目标文件

File file = new File("c:\\test\\mly.txt");

//2准备你要输出的数据

String data = "hello xiaohuang";

//3创建文件输出流

// OutputStream out = null;

try(OutputStream out = new FileOutputStream(file)) {

//out = new FileOutputStream(file);

 

//4通过输出流把数据写入文件

out.write(data.getBytes());

//5关闭输出

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

字节输入流:

InputStream 字节输入流的父类

FileInputStream 文件字节输入流

 

//把文件中的数据输入到程序中

public static void inputStream(){

//1、要确定读取的目标文件

File file = new File("c:\\test\\mly.txt");

//2、创建一个文件输入流绑定这个目标文件

try {

InputStream in = new FileInputStream(file);

//3、确定每次要读取的字节大小

// byte[] bs = new byte[1024*1024*10];

byte[] bs = new byte[4];

int len = -1;//每次从文件中读取数据的实际长度

StringBuilder sb = new StringBuilder((int)file.length());

while((len=in.read(bs))!=-1){

sb.append(new String(bs,0,len));

}

//5、关闭输入流

in.close();

System.out.println(sb);

//4、循环读取数据,(保存或输出到控制台)

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

 

示例:

从控制台输入一句话,可以把这句话客写入文件中,直到输入ok退出

private static void saveDataFormConsole() throws IOException{

File file = new File("c:\\test\\vince.txt");

OutputStream out = new FileOutputStream(file);

Scanner input = new Scanner(System.in);

String exit = "ok";//退出的标记

do{

System.out.println("请输入:");

String info = input.nextLine();

if(exit.equalsIgnoreCase(info)){

break;

}else{

out.write(info.getBytes());

//向文件中输出换行符  (\r\n)

String separator = System.getProperty("line.separator");

out.write(separator.getBytes());

}

 

}while(true);

out.close();

}

 

注意,使用字节流处理文本文件时,由于文本文件中的字符可能使用不同的编码,

比如,中文使用2个字节表示,英文字符使用单字节表示,此时,在读取部分内容时

可以出现乱码。所以,这种情况下,我们应该使用字符流来处理。

 

所谓字符流,就是按文本文件中的每个字符为单位进行处理,所以处理文本文件,通常

建议使用字符流,其它任意情况都建议使用字节流

 

三、字符流

//处理的单位是字符

private static void read() throws IOException{

Reader reader = new FileReader("c:\\test\\io.txt");

char[] cs = new char[32];

int len = -1;

StringBuilder sb = new StringBuilder(100);

while(true){

len=reader.read(cs);

if(len==-1){break;}

sb.append(new String(cs,0,len));

}

reader.close();

System.out.println(sb);

}

 

字节流与字符流的区别?

1、字节流会在执行write方法时,直接把数据写入磁盘

2、字符流会在执行write方法时,把数据保存到缓存中,在关闭或刷新时会把缓存的

    数据同步到磁盘中。

    字符缓存默认8KB,刷新缓存的方式有三种:

    1)缓存已满

    2)手动调用flush方法

    3)手动调用close方法

字符流是基于字节流上的实现

 

四、转换流:

1InputStreamReader

    把输入的字节流转换为字符流处理

2OutputStreamWriter

    把输出的字节流转换为字符流处理

 

五、缓冲流

缓冲流给字节或字符提供一种功能的增强,加入缓冲(缓存)的流操作,可以提高

写入或读取的效率,在使用流操作时必需添加缓冲

 

BufferedInputStream : 字节输入缓冲流

BufferedOutputStream:字节输出缓冲流

BufferedReader:字符输入缓冲流

BufferedWriter:字符输出缓冲流

 

六、打印流

PrintStream: 字节打印流,给字节输出增强功能

PrintWriter: 字符打印流,给字符输出增强功能

 

补充作业:

实现一个文件目录的复制

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值