java基础之 IO流


javaIO流   IO流 : (input  output) 输入输出流 :输入 :将文件读到内存中 输出:将文件从内存输出到其他地方。   IO技术的作用:主要就是解决设备和设备之间的数据传输问题。比如:硬盘到--->内存,内存数据--->硬盘中--->内存,内存数据--->硬盘中 把键盘中的数据写入到内存。   将U盘中文件 拷贝到电脑中 :输入流--->读到内存 --->通过输出流读到电脑磁盘中。   IO的应用场景:   比如:打卡机导出信息表   比如:注册的时候图片的上传。   比如:下载功能    解析XML 数据保存到本地,数据一个永久保存。数据保存到磁盘上是以文件的形式存在。所以现在学习文件的造作。   java中是通过File文件类来操作文件和文件夹。   目录的分隔符:    在Windows系统上目录分隔符:\,但是Linux系统上的目录分隔符是:/ 注意点:在Windows上\或者/都可以作为目录的分隔符。如果你用的反斜杠     路径问题:   结对路径:文件在硬盘上的完整路径。绝对路径一般都是以盘符开头D:\\a.txt    相对路径:相对路径就是资源文件相对当前程序所在的路径。          IO流 : 作用 :用于设备和设备之间的数据传输。   File类的使用 :操作问价的属性      IO流:用来操作文件的数据。      IO流的分类:      流按照操作数据的类型分为两种: 字节流  ,字符流            字节流 : 读取的是文件的二进制数据,不会对二进制做处理。不会解析成比看得懂的数据。      字符流 :读取的也是二进制数据,他会将二进制数据转化为我们能过识别的字符(解码)。  字符流是以字符单位的。                    字符流 = 字节流 + 解码。              流按照流的方向: 输入流和输出流。    判断流是输出还是输入: 以当期的应用程序为参考 ,观察数据是流入还是流出,如果是流入就输入流 ,如果是流出就是输出流。        //====================字节流========================    1.字节输入流:        InputStream :此抽象类是表示字节输入流的所有类的超类 ,抽象的类      如何判断一个流值字节输入流 :            判断一下他的类名是否以InputStream结尾。         使用 FileInputStream: 是InputStream的子类        FileInputStream使用步骤:       1.找到目标文件       2.建立通道       3.创建一个缓冲区       4.读取数据       5.关闭资源   public class Demo1 {   public static void main(String[] args) throws IOException { // TODO Auto-generated method stub //         getFile(); // getFile2(); // getFile3(); getFile4(); }   //方式四:通过创建缓冲区和循环的方式来读取 public static void getFile4() throws IOException{     //1.找目标文件   File file = new File("D:\\java课件及资料\\第十九次课\\代码\\Day19\\src\\com\\beiwo\\homework\\HomeWork.java");   //2.建立通道   FileInputStream fileInputStream = new FileInputStream(file);   //3.创建一个缓冲区   byte[] b = new byte[1024]; // 一般写1024倍数   //4.读取数据   int count = 0;   while((count = fileInputStream.read(b))!=-1){      System.out.println(new String(b,0,count));   }   //5.关闭资源   fileInputStream.close(); }     //方式三:创建缓冲区来读取数据     缺陷不能够读取一个完整的文件 public static void getFile3() throws IOException{ //1.找目标文件 File file = new File("D:\\a.txt"); //2.建立通道 FileInputStream fileInputStream = new FileInputStream(file); //3.创建一个缓冲区 byte[] b = new byte[1024]; //4.读数据 //缓冲区来读数据 : 数据存在哪里   //数据是存在缓存区字节数组中的 //返回值就是文件的大小。 int count = fileInputStream.read(b); System.out.println(count); //String里面帮我们做了解码功能 System.out.println(new String(b, 0, count));   //5.关闭资源 fileInputStream.close();   }     //方法二:用循环来读取字节数 缺点读取的效率不高 public static void getFile2() throws IOException{   //1.找目标文件 File file = new File("D:\\a.txt"); //2.建立通道 FileInputStream fileInputStream = new FileInputStream(file); //3.读数据 /*for(int i = 0;i
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;

 
2.字节输出流 :
       OutPutStream : 他也是所有字节输出流的超类 ,也是一个抽象的类 ,使用子类
            -----FileOutputStream   文件输出流
            
      
      FileOutputStream 的使用步骤:
            1.找到目标文件
            2.建立通道
            3.写入数据
            4.关闭资源
            
  FileOutputStream的使用注意事项:
          1.使用FileOutputStream写数据的时候,如果目标文件不存在,那么就会自己创建一个目标文件对象。
          2.使用FileOutputStream写数据的时候,如果目标文件存在,先将里面的数据清空,在写入数据。
          3.使用FileOutputStream写数据的时候,如果目标文件存在,想将数据在原有的基础上追加,这个
                             时候就应该使用FileOutputStream(File file, boolean append) 构造方法,  append如果为true表示
                             可以追加数据,反之不信。
          4..使用FileOutputStream写数据的时候,用write(int a)方法写数据,虽然接收的是int ,但实际上只有一个字节的数据,
                            操作的是低八位的二进制 ,其他的24位全部丢掉。
                            
 
                            
 练习题: 将一张图片拷贝到另外一个地方。
 
 字节输出流代码:
public class Demo2 {

    /**
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
      writeData();
        
        //writeData2();
      
      FileInputStream inp = new FileInputStream(new File("D:\\a.txt"));
      byte[] b = new byte[1024];
      inp.read(b);
      System.out.println(Arrays.toString(b));
      
    }
    
    //方式二:
    public static void writeData2() throws IOException{
        //1.找目标文件
        File file = new File("D:\\a.txt");    
        //2.创建一个通道
        FileOutputStream outputStream = new FileOutputStream(file,true);  // 在这一步创建的文件。
        //3.创键一个字节数组
        String str = "hello word";
        //将字符串变为字节数组
        byte[] b = str.getBytes();
        
        //4.写入数据
        outputStream.write(b);
        
        //5.关闭资源
        outputStream.close();
        
        
    }
    
    //方式一
    public static void writeData() throws IOException{
        //1.找目标文件
        File file = new File("D:\\a.txt");
        
        //2.创建一个通道
        FileOutputStream outputStream = new FileOutputStream(file);
        
        //3.开始写入数据
        /*int a = 10; // 4个字节  
        outputStream.write(a); //每次输出一个字节
        outputStream.write('b');
        outputStream.write('c');*/
        
        // 0000-0000 0000-0000 0000-0001 1111-1111  ==  511
        int a = 127;
        outputStream.write(a); // 255
        //4.关闭资源
        outputStream.close();
    }

}