JavaSE入门学习42:文件传输基础之I/O流(一)
来源:互联网 发布:百度知道关注软件 编辑:程序博客网 时间:2024/06/05 22:36
一编码问题
计算机的编码问题
1)在一个IO文件下建立三个文本文件,第一个文件名是联想,内容也是联想;第二个文件名是联通,内容也是联
通;第三个文件名是联,内容也是联。
2)依次打开三个文件,会发现名称叫做联的文件和名称叫做联通的文件中的内容都是乱码,而名称叫做联想的文
件中的内容却是正常显示。
3)我们在建立文本文件的时候并没有指定编码格式,而是采用默认的编码格式,一般计算机系统采用的默认编码
格式是ANSI编码,也有其他的编码格式,比如GB2312和UTF-8,都是我们常用的编码格式。我们可以从这点下手,
找到上述三个文件在保存时都是以何种编码格式存储的,我们发现乱码的两个文件的编码格式为
UTF-8,而正常显示的编码格式为ANSI编码格式。
4)实例代码:
public class EncodeDemo{ public static void main(String[] args) throws Exception{ String s="IT行业"; //转换成字节序列用的是项目默认的编码ANSI byte[] bytes1=s.getBytes(); for(byte b:bytes1){ //把字节转换成了int以16进制的方式显示 System.out.print(Integer.toHexString(b & 0xff)+" "); } System.out.println(); byte[] bytes2=s.getBytes("gbk"); //gbk编码中文占用2个字节,英文占用1个字节 for(byte b:bytes2){ System.out.print(Integer.toHexString(b & 0xff)+" "); } System.out.println(); byte[] bytes3=s.getBytes("utf-8"); //utf-8编码中文占用3个字节,英文占用1个字节 for(byte b:bytes3){ System.out.print(Integer.toHexString(b & 0xff)+" "); } //Java是双字节编码utf-16be System.out.println(); byte[] bytes4=s.getBytes("utf-16be"); //utf-16be编码中文占用2个字节,英文占用2个字节 for(byte b:bytes4){ System.out.print(Integer.toHexString(b & 0xff)+" "); } System.out.println(); /*当你的字节序列是某种编码时,这个时候想把字节序列变成字符串 *也需要用这种编码方式,否则会出现乱码 */ String str1=new String(bytes4); System.out.print(str1); String str2=new String(bytes4,"utf-16be"); System.out.print(str2); /*文本文件就是字节序列,可以是任意编码的字节序列 *如果我们在中文机器上直接创建文本文件,那么该文本文件只认识ANSI编码 *联通、联这是一种巧合,它们正好符合了utf-8编码的规则 */ }}
运行结果:
5)因此我们得出了,中文操作系统下,ANSI编码代表GBK编码,gbk编码中文占用2个字节,英文占用1个字节;
utf-8编码中文占用3个字节,英文占用1个字节;这样的话,我们可以查看创建的文本文件的字节大小。
二File类的使用
java.io.File类用于表示文件(或者目录),File类只用于表示文件(或者目录)的信息(名称、大小等),不能用于文件内
容的访问。
File类中的字段有:
File类的构造方法有:
File类的方法有:
(1)创建目录
实例代码:
import java.io.*;public class FileDemo {public static void main(String[] args) {//了解构造函数的情况查帮助File file = new File("E:\\Java\\JavaSE\\IO\\File");//判断文件是否存在,不存在立即创建;存在的话立刻删除if(!file.exists()){file.mkdir(); //file.mkdirs();}else{file.delete();}//是否是一个目录,如果是目录返回true,如果不是目录或者目录不存在返回的是falseSystem.out.println(file.isDirectory());//是否是一个文件System.out.println(file.isFile());//File file2 = new File("E:\\Java\\JavaSE\\IO日记1.txt");File file2 = new File("E:\\Java\\JavaSE\\IO","日记1.txt");if(!file2.exists()){try{file2.createNewFile();}catch(IOException e) {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)遍历目录
实例代码1:
import java.io.*;//列出File的一些常用操作,比如过滤、遍历等操作public class FileUtils{ 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 string:filenames){System.out.println(string);}System.out.println();//打印绝对路径for(String string:filenames){System.out.println(dir+"\\"+string);} } public static void main(String[] args) throws IOException{ FileUtils.listDirectory(new File("E:\\Java\\JavaSE\\IO")); }}
运行结果:
实例代码2:
import java.io.*;//列出File的一些常用操作,比如过滤、遍历等操作public class FileUtils{ public static void listDirectory(File dir) throws IOException{ //列出指定目录下(包括其子目录)的所有文件 if(!dir.exists()){throw new IllegalArgumentException("目录:"+dir+"不存在"); }if(!dir.isDirectory()){throw new IllegalArgumentException(dir+"不是目录");}//如果想要遍历子目录下的内容就要构造成File对象做递归操作,File提供了直接返回File对象的APIFile[] files=dir.listFiles();//返回的是直接子目录(文件)的抽象if(files!=null&&files.length>0){for(File file:files){if(file.isDirectory()){//递归操作listDirectory(file);}else{System.out.println(file);}}} } public static void main(String[] args) throws IOException{ FileUtils.listDirectory(new File("E:\\Java\\JavaSE\\IO")); }}
运行结果:
1 0
- JavaSE入门学习42:文件传输基础之I/O流(一)
- JavaSE入门学习42:文件传输基础之I/O流(一)
- JavaSE入门学习43:文件传输基础之I/O流(二)
- JavaSE入门学习44:文件传输基础之I/O流(三)
- JavaSE入门学习45:文件传输基础之I/O流(四)
- JavaSE入门学习46:文件传输基础之I/O流(五)(Java序列化)
- JavaSE入门学习46:文件传输基础之I/O流(五)(Java序列化)
- JavaSE入门学习45:文件传输基础之I/O流(四)
- JavaSE入门学习44:文件传输基础之I/O流(三)
- JavaSE入门学习43:文件传输基础之I/O流(二)
- JavaSE入门学习41:文件传输基础之二进制基础
- JavaSE基础学习笔记-Java I/O 系统1
- JavaSE基础学习笔记-Java I/O系统2-File
- javaee学习日记之java基础之I/O流
- JAVASE--集合、I/O流
- Java基础I/O流(一)
- IO基础入门之I/O多路复用技术
- IO基础入门之I/O多路复用技术
- 找实习之前看了些东西,觉得有必要了解的。
- chrome 浏览器安装 adblock(屏蔽广告的插件)
- 【Leetcode】Two sum(easy)
- WINCE MFC 自绘控件的WM_PAINT与WM_ERASEBKGND、WM_TIMER 问题总结
- 网页端播放音频
- JavaSE入门学习42:文件传输基础之I/O流(一)
- 【程序人生】:对于大学教育的一点看法
- 后缀平衡树 bzoj3682 Phorni
- java中static
- android 代码控制隐藏
- 旋转数组的最小数字(非递减数组)
- 数据库的范式和安全保护
- Android中的电话通讯机制(1)
- android中bitmap使用