Java IO流

一、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)
          创建从中读取和向其中写入(可选)的随机访问文件流,该文件具有指定名称。

找到一个写的不错的博客:

http://blog.csdn.net/akon_vm/article/details/7429245

原文地址:https://www.cnblogs.com/xiaotiaosi/p/6385773.html