《文件传输基础----Java IO流---《一》》
来源:互联网 发布:stc89c52单片机简介 编辑:程序博客网 时间:2024/06/04 20:12
JAVA I/O 输入输出流
一、编码问题
编码问题我就以一个程序来为大家解释
package FileIO;
public classEncodeDemo {
public static void main(String []args)throws Exception{
Strings="慕课ABC";
byte[]bytes1=s.getBytes();//将字符串转化为字节数组 转换成字节序列是项目默认的字节编码(gbk)可以右键查看属性,看到默认编码为gbk
for(byteb:bytes1){
//把字节(转化成int)以十六进制的方式显示
//byte转化为int,其实就是将把后八位前边添上4个0,让其变成32位,但是前边的24个0没用,所以没有必要显示出来,所以和oxff(1111 1111 )与运算将前边24个0去掉
System.out.print(Integer.toHexString(b & 0xff)+" ");//结果中41 42 43分别代表的是A B C
}
System.out.println();
byte[]bytes2=s.getBytes("gbk");
//由显示结果可以看出,gbk编码中,中文占两个字节,英文占用一个字节
for(byteb1:bytes2){
System.out.print(Integer.toHexString(b1 & 0xff)+" ");
}
System.out.println();
byte[]bytes3=s.getBytes("utf-8");//使用utf-8进行转换
for(byteb2:bytes3){
System.out.print(Integer.toHexString(b2 & 0xff)+" ");//从运行的结果可以看出
//在utf-8编码中,中文占三个字节,英文占一个字节
}
System.out.println();
//我们一直在说,java是双字节编码(其实是utf-16be编码),就是说java的一个字符能否放一个汉字啊,当然可以,因为默认编码为gbk,一个汉字占两个字节,java又为双字节编码,所以可以
byte[]bytes4=s.getBytes("utf-16be");
for(byteb3:bytes4){
System.out.print(Integer.toHexString(b3 & 0xff)+" ");
//从运行结果可以看出,中文占两个字节,英文占两个字节
}
System.out.println();
/*
* 当你的字节序列是某种编码时,这时想把字节序列变成字符串,也必须使用这种编码方式,否则会出现乱码
*/
Stringstr1=new String(bytes4);//项目的默认编码
System.out.println(str1);//这样会出现乱码
Stringstr2=new String(bytes4,"utf-16be");
System.out.println(str2);//这样就正常输出了
/*
* 文本文件就是字节序列
* 可以是任意字节的编码序列
* 如果我们在中文机器上直接创建文本文件,那么该文本文件只认识ansi编码
*/
}
}
效果图
二、File类常用API介绍
Java.io.File类常用于表示文件(或目录)
File类只用于表示文件(目录)的信息(比如说:名称、大小等),不能用于文件内容的访问
下边还是以代码的方式为大家讲解
package FileIO;
import java.io.File;
public classFileDemo {
public static void main(String[] args) {
//了解构造函数的情况 可以查看帮助(Alt + /)(将光标放在第二个File那儿)
Filefile=new File("D:\\c++");//这里传进去的是一个目录的路径
System.out.println(file.exists());//exists():判断文件/文件夹是否存在
Filefile1=new File("D:\\Java\\ABC");//这里我写的是一个不存在的目录
//File file1=new File("D:\\Java","ABC");上边的也可以这样写,后边的部分表示该目录下的目录
System.out.println(file1.exists());
if(!file1.exists())
file1.mkdir();//这个函数是说如果该目录不存在,则创建该目录
//如果创建多级目录,可以用mkdirs()函数
else
file1.delete();//若存在则删除该目录
//判断是否是一个目录如果不是目录或目录不存在,则返回false
System.out.println(file.isDirectory());
//判断是否是一个文件
System.out.println(file.isFile());
//常用的File对象的API
System.out.println(file1);//这个是直接打印出的是file.toString()的内容
System.out.println(file1.getName());//直接打印出名字
System.out.println(file1.getParent());//得到父目录
//一些常用的API就说这么多,还有一下,大家可以按照在上边提供的方式查看帮助手册来学习
}
}
效果图
三、遍历目录
packageFileIO;
import java.io.File;
import java.io.IOException;
//列出file类的一些常用操作 比如过滤、遍历等 将他们包装成一个工具类以后使用就方便了
public classFileUtils {
/*
* 列出指定目录下(包括其子目录)的所有文件
*
*/
public static void listDirectory(Filedir)throws IOException{//这个throwsIOException其实就是为了防止IO异常
if(!dir.exists()){
throw new IllegalArgumentException("目录"+dir+"不存在.");//如果文件不存在则抛出异常
}
if(!dir.isDirectory()){//如果不是目录
throw new IllegalArgumentException(dir+"不是目录");
}
/*String[] filenames = dir.list();//这个list()函数返回的是一个字符串数组(返回的是文件的名称) 直接是子的名称 不包含子目录下的内容
//list()方法用于列出当前目录下的子目录和文件
for(Stringstring:filenames){
System.out.println(string);
}*/
//如果要遍历子目录下的内容就需要构造成File对象做递归操作(File提供了直接返回File对象的API)
//也就是说,如果上边的那个list()方法返回的字符串是一个目录的名称,那么我们还需要将其转换成对象,进行递归
File[]files= dir.listFiles();//返回的是直接子目录(文件)的抽象
/*for(File file:files){
//System.out.println(file);//这时候显示的就都是直接子目录的名称(此时名称都已经转换成了对象)
//而如果我们想将所有子目录下的文件全都拿出来
}这一个for循环是用来测试的*/
if(files!=null &&files.length>0){
for(Filefile:files){
if(file.isDirectory()){
//递归
listDirectory(file);
}else{
System.out.println(file);
}
}
}
}
}
然后下边这个是测试类
package FileIO;
import java.io.File;
import java.io.IOException;
/*
* 测试类
*/
public classFileUtilTest1 {
public static void main(String[] args)throws IOException {
FileUtils.listDirectory(new File("D:\\Java"));
}
}
效果图
- 《文件传输基础----Java IO流---《一》》
- 文件传输基础----Java IO流
- 文件传输基础——Java IO流
- 文件传输基础——Java IO流
- 《文件传输基础----Java IO流---《二》》
- 《文件传输基础----Java IO流---《三》》
- Java IO 流(文件传输基础)
- 文件传输基础(Java IO流)--慕课网笔记
- 文件传输基础——Java IO流
- 文件传输基础——Java IO流
- 文件传输基础——Java IO流
- Java学习之文件传输基础---Java IO流
- Java拾遗2:文件传输基础——Java IO流
- 慕课JAVA之文件传输基础----JAVA IO流
- 文件传输基础—Java IO流 FileInputStream 的运用
- 文件传输基础——Java IO流笔记
- Java基础--IO流(一)
- java基础---IO(一)
- ubuntu 15.04 安装无线网卡驱动
- [php]属性、方法和常量
- mybatis简单运用(基于Annotation)
- Java解析XML getNodeValue()返回空
- Android事件分发机制分析
- 《文件传输基础----Java IO流---《一》》
- 程序媛进步指南,带着思考去做这些事情
- 四种方案解决ScrollView嵌套ListView问题
- 提高项目34-矩阵相乘
- 使用JDOM方式解析XML
- commons-pool实战之 GenericObjectPool和GenericKeyedObjectPool
- jdk1.7和jdk1.8区别
- C语言getgroups()函数:获取组代码函数
- java递归实现二分查找算法