一、java常用编码方式
要讨论输出输入流,就不得不说java的编码,java使用的编码方式有:gbk、UTF-8、UTF-16、IOS-8859-1、US-ASCII等。常用的为gbk和UTF-8.
1、gbk编码中文占用2个字节,英文占用1个字节(java默认编码)
1 public class javaTest2 {
2
3 public static void main(String[] args) {
4
5 String s="小帅哥ABC";
6 byte []byte1=s.getBytes();
7 for (byte b : byte1) {
8 System.out.print(b+" ");
9 }
10 }
11 }
运行结果:
1 -48 -95 -53 -89 -72 -25 65 66 67
小 帅 哥 A B C
2、在utf-8编码下中文占用3个字节,英文占用一个字节
1 import java.io.UnsupportedEncodingException;
2
3 public class javaTest2 {
4
5 public static void main(String[] args) throws UnsupportedEncodingException {
6
7 String s="小帅哥ABC";
8 byte []byte1=s.getBytes("UTF-8");
9 for (byte b : byte1) {
10 System.out.print(b+" ");
11 }
12 }
13 }
运行结果:
1 -27 -80 -113 -27 -72 -123 -27 -109 -91 65 66 67
小 帅 哥 A B C
3、java双字节编码不管是中文还是英文都是两个字节
1 import java.io.UnsupportedEncodingException;
2
3 public class javaTest2 {
4
5 public static void main(String[] args) throws UnsupportedEncodingException {
6
7 String s="小帅哥ABC";
8 byte []byte1=s.getBytes("UTF-16be");
9 for (byte b : byte1) {
10 System.out.print(b+" ");
11 }
12 }
13 }
运行结果:
1 92 15 94 5 84 -27 0 65 0 66 0 67
小 帅 哥 A B C
注:当你的字节序列是某种编码时,这是想把字节序列变成字符串,也需要用这种编码方式,否则会出现乱码~
1 import java.io.UnsupportedEncodingException;
2
3 public class javaTest2 {
4
5 public static void main(String[] args) throws UnsupportedEncodingException {
6
7 String s="小帅哥ABC";
8 System.out.println("s:"+s);
9 byte []byte1=s.getBytes("UTF-16be");
10 for (byte b : byte1) {
11 System.out.print(b+" ");
12 }
13 System.out.println();
14 //字节序列的时候用的是UTF-16be编码方式,字节序列转字符串时用的是gbk(默认)
15 String s1=new String(byte1);
16 System.out.println("s1:"+s1);
17
18 //字节序列的时候用的是UTF-16be编码方式,字节序列转字符串时用的是UTF-16be
19 String s2=new String(byte1,"UTF-16be");
20 System.out.println("s2:"+s2);
21 }
22 }
运行结果:
1 s:小帅哥ABC
2 92 15 94 5 84 -27 0 65 0 66 0 67
3 s1:^T?
4 s2:小帅哥ABC
二、关于io流的一些基础知识,找到一些写的比较好的博客:
http://blog.csdn.net/hguisu/article/details/7418161
关于字节流和字符流的转换(关于InputStreamReader 和 OutputStreamWriter类用法)
http://blog.csdn.net/liuhenghui5201/article/details/8292552
关于管道流(PipedInputStream和PipedOutputStream,PipedReader和PipedWriter类用法)
http://www.cnblogs.com/chinareny2k/archive/2010/03/24/1693878.html
关于序列化和反序列化(ObjectInputStream和ObjectOutputStream类的使用)
http://blog.csdn.net/wangloveall/article/details/7992448/
三、File类
构造函数
1 public class FileDemo {
2 public static void main(String[] args){
3 //构造函数File(String pathname)
4 File f1 =new File("c:\abc\1.txt");
5 //File(String parent,String child)
6 File f2 =new File("c:\abc","2.txt");
7 //File(File parent,String child)
8 File f3 =new File("c:"+File.separator+"abc");//separator 跨平台分隔符
9 File f4 =new File(f3,"3.txt");
10 System.out.println(f1);//c:abc1.txt
11
12 }
13
14 }
创建方法
1.boolean createNewFile() 不存在返回true 存在返回false
2.boolean mkdir() 创建目录
3.boolean mkdirs() 创建多级目录
删除方法(删除目录时,需要先删除目录下的文件,利用递归的思想来解决)
1.boolean delete()
2.boolean deleteOnExit() 文件使用完成后删除
1 import java.io.File;
2 import java.io.IOException;
3 public class FileDemo2 {
4 public static void main(String[] args){
5 File f =new File("d:\1.txt");
6 try {
7 System.out.println(f.createNewFile());//当文件存在时返回false
8 System.out.println(f.delete());//当文件不存在时返回false
9 } catch (IOException e) {
10 // TODO Auto-generated catch block
11 e.printStackTrace();
12 }
13 }
14 }
判断方法
1.boolean canExecute()判断文件是否可执行
2.boolean canRead()判断文件是否可读
3.boolean canWrite() 判断文件是否可写
4.boolean exists() 判断文件是否存在
5.boolean isDirectory()
6.boolean isFile()
7.boolean isHidden()
8.boolean isAbsolute()判断是否是绝对路径 文件不存在也能判断
获取方法
1.String getName()
2.String getPath()
3.String getAbsolutePath()
4.String getParent()//如果没有父目录返回null
5.long lastModified()//获取最后一次修改的时间
6.long length()
7.boolean renameTo(File f)
8.File[] liseRoots()//获取机器盘符
9.String[] list()
10.String[] list(FilenameFilter filter)
列出磁盘下的文件和文件夹
1 public class FileDemo3 {
2 public static void main(String[] args){
3 File[] files =File.listRoots();
4 for(File file:files){
5 System.out.println(file);
6 if(file.length()>0){
7 String[] filenames =file.list();
8 for(String filename:filenames){
9 System.out.println(filename);
10 }
11 }
12 }
13 }
14
15 }
文件过滤
1 import java.io.File;
2 import java.io.FilenameFilter;
3 public class FileDemo4 {
4 public static void main(String[] args){
5 File[] files =File.listRoots();
6 for(File file:files){
7 System.out.println(file);
8 if(file.length()>0){
9 String[] filenames =file.list(new FilenameFilter(){
10 //file 过滤目录 name 文件名
11 public boolean accept(File file,String filename){
12 return filename.endsWith(".mp3");
13 }
14 });
15 for(String filename:filenames){
16 System.out.println(filename);
17 }
18 }
19 }
20 }
21
22 }
File[] listFiles()
File[] listFiles(FilenameFilter filter)
利用递归列出全部文件
1 public class FileDemo5 {
2 public static void main(String[] args){
3 File f =new File("e:\音樂");
4 showDir(f);
5 }
6 public static void showDir(File dir){
7 System.out.println(dir);
8 File[] files =dir.listFiles();
9 for(File file:files){
10 if(file.isDirectory())
11 showDir(file);
12 else
13 System.out.println(file);
14 }
15 }
16 }
移动文件
找出d盘下所有的 .java 文件,拷贝至 c:jad 目录下,并将所有文件的类型由.java 修改为.jad 。
1 public class Test5 {
2 public static void main(String[] args){
3 File f1 = new File("d:\");
4 moveFile(f1);
5 }
6 public static void moveFile(File dir){
7 File[] files=dir.listFiles();
8 for(File file:files){
9 if(file.isDirectory())
10 moveFile(file);
11 else{
12 if(file.getName().endsWith(".java"))
13 file.renameTo(new File("c:\jad\"+
14 file.getName().substring(0,file.getName().lastIndexOf('.'))+".jad"));
15 }
16 }
17 }
18 }
四、RandomAccessFile类
RandomAccessFile是java提供的对文件内容的访问类,既可以读文件,也可以写文件。RandomAccessFile支持随机访问文件,可以访问文件的任意位置。
1、构造方法表RandomAccessFile(File file, String mode) 创建从中读取和向其中写入(可选)的随机访问文件流,该文件由 File 参数指定。 |
RandomAccessFile(String name, String mode)
创建从中读取和向其中写入(可选)的随机访问文件流,该文件具有指定名称。 |
找到一个写的不错的博客: