文件传输基础——Java IO流

1 文件的编码

1.1 文件的编码

这里写图片描述

public static void main(String[] args) {
    // TODO Auto-generated method stub
    String s = "慕课ABC";
    /**
     * 转换成字节序列利用的是项目默认的编码,
     * eclipse查看项目默认编码的方式:点击项目->右击Properties->Resource->Text file encoding
     * 项目编码也可以显示的指定:byte[] bytes = s.getBytes("gbk"); 
     */
    byte[] bytes1 = s.getBytes(); 
    for(byte b:bytes1) {
        // 把字节转换为int,以16进制的方式显示
        System.out.print(Integer.toHexString(b & 0xff) + " ");
    }
    System.out.println();

    try {
        byte[] bytes2 = s.getBytes("gbk");
        /**
         * gbk编码中文占2个字节,英文占1个字节
         */
        for(byte b:bytes2) {
            System.out.print(Integer.toHexString(b & 0xff) + " ");
        }
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    System.out.println();

    try {
        byte[] bytes3 = s.getBytes("utf-8");
        /**
         * 在utf-8编码中,中文占用3个字节,英文占用1个字节
         */
        for(byte b:bytes3) {
            System.out.print(Integer.toHexString(b & 0xff)+" ");
        }
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    System.out.println();

    byte[] bytes4 = null;
    try {
        /**
         * 在utf-16be中,中文和英文都占用2个字节
         */
        bytes4 = s.getBytes("utf-16be");
        for(byte b:bytes4) {
            System.out.print(Integer.toHexString(b & 0xff)+" ");
        }
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    System.out.println();

    /**
     * 字节序列转化为字符串时,当你的字节序列的编码方式与项目默认编码方式不同时,
     * 这个时候需要手动添加编码方式进行转换,
     * 否则会出现乱码
     * 
     */
    String str1 = new String(bytes4);
    System.out.println(str1);
    try {
        String str2 = new String(bytes4,"utf-16be");
        System.out.println(str2);
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    /**
     * eclipse中什么编码的项目只认识什么编码的文件,
     * 将一个项目的文件拷贝到另一个编码方式不同的项目中,就会出现乱码,
     * 这就是直接拷贝别人项目文件出现乱码的原因
     */ 

    /**
     * 文本文件 就是字节序列
     * 可以是任意编码的字节序列
     * 如果我们在中文机器上直接创建文本文件,那么该文本文件只认识ansi编码
     */
}

2 File 类的使用

2.1 File 类常用 API 介绍

java.io.File 类用于表示文件(目录)
File类只用于表示文件(目录)的信息(名称、大小等),不能用于文件内容的访问

public static void main(String[] args) {
    // TODO Auto-generated method stub
    /**
     * eclipse中用 Alt+/ 来查看File的构造函数,
     * 文件分割符可以用 \\ 或者 / 或者  File.separator,
     * File.separator不论win系统还是linux系统,都表示分割符
     */
    File file = new File("D:\\javaio"); 
    System.out.println(file.exists()); // 判断文件是否存在
    if(!file.exists()) { 
        file.mkdir(); // 创建一级目录
        file.mkdirs(); // 如果文件不存在,创建多级目录
    }else {
        file.delete(); // 如果文件存在,删除目录
    }

    /**
     * 判断是否是一个目录 ,
     * 如果是目录返回true,如果不是目录或者不存在返回false
     */
    System.out.println(file.isDirectory());
    // 判断是否是一个文件
    System.out.println(file.isFile());

    /**
     * 创建文件
     */
    File file2 = new File("d:\\javaio\\日记1.txt");
    File file3 = new File("d:\\javaio","日记2.txt");
    if(!file2.exists()) {
        try {
            file2.createNewFile(); // 文件不存在,创建这个文件
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }else {
        file2.delete(); // 文件存在删除文件
    }

    // 常用的File对象的API
    System.out.println(file); // 打印file.toString()的内容
    System.out.println(file.getAbsolutePath()); // 打印路径
    System.out.println(file.getName()); // 打印目录名
    System.out.println(file2.getName()); // 打印文件名
    System.out.println(file.getParent()); // 返回父目录路径
    System.out.println(file2.getParent()); // 返回父目录路径
    System.out.println(file.getParentFile().getAbsolutePath()); // 返回父目录路径
}

2.2 遍历目录

package com.amoscxy;

import java.io.File;
import java.io.IOException;

/**
 * 列出File的一些常用操作比如过滤、遍历等操作
 * @author BG235144
 *
 */
public class FileUtils {
   
    /**
     * 列出指定目录下(包括其子目录)的所有文件
     * @param dir
     * @throws IOException
     */
    public static void listDirectory(File dir) throws IOException{
        if(!dir.exists()) {
            throw new IllegalArgumentException("目录:"+dir+"不存在");
        }
        if(!dir.isDirectory()) {
            throw new IllegalArgumentException(dir+"不是目录");
        }
        /**
         * 返回的是字符串数组,
         * 不包含子目录下的内容
         */
//      String[] filenames = dir.list(); 
//      for(String filename:filenames) {
   
//          System.out.println(dir+"\\"+filename);
//      }

        /**
         * 如果要遍历子目录下的内容就要构造成File对象做递归操作,
         * File提供了直接返回File对象的api,
         * 返回的是直接子目录(文件)的对象
         */
        File[] files = dir.listFiles();
//      for(File file:files) {
   
//          System.out.println(file);
//      }
        if(files!=null && files.length>0) {
            for(File file:files) {
                if(file.isDirectory()) {
                    
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值