JAVA基础-输入输出流

一,File类:文件的创建和删除

1.File(String pathname):pathname是指路径名称。用法 File file = new File("d:/1.txt ");

2.File(String parent, String child):parent是父路径字符串,child是子路径字符串。用法:File file = new File(" D:/", " letter.txt");

3.File(File f, String child):File file = new file();

如果当前目录里不存在名为word的文件,File类对象可以调用createNewFile()方法创建一个名为word的新文件。

还可以用文件对象的delete()方法删除掉文件。

public class FileTest {
    public static void main(String[] args) {

        File file = new File("weord.txt");  //创建文件对象,在当前目录
        if(file.exists()) {
            file.delete();
            System.out.println("文件已删除");
        }else{
            try{                            //try语句块捕捉可能出现的异常
                file.createNewFile();       //在当前目录下创建文件
                System.out.println("文件已创建");
            }catch(Exception e) {
            e.printStackTrace();    //
        }
        }
    }
}

二,获取文件信息:都用特定方法获取文件的各类信息。

getName():获取文件的名称   length():获取文件的长度   getAbsolutePath():获取文件的绝对路径   getParent():获取文件的父路径   lastModified():获取文件最后修改时间

canread():判断是否可读   canwrite():判断是否可写   exits():判断是否存在   isFile():判断是否存在   isDirectory():判断是否是一个目录   isHidden():判断是否是隐藏文件

我们把上面创建和删除的例子稍微改一下:

public class FileTest {
    public static void main(String[] args) {

        File file = new File("word.txt");  //创建文件对象,在当前目录
        if(file.exists()) {                 //获取各类信息
            String name = file.getName();
            System.out.println("文件名称是:"+ name);
            long length = file.length();
            System.out.println("文件长度是:"+ length);
            boolean hidden = file.isHidden();
            System.out.println("文件是隐藏文件吗?"+ hidden);
            String path = file.getAbsolutePath();
            System.out.println("文件的绝对路径是:"+ path);
            boolean read = file.canRead();
            System.out.println("文件是否可读?"+ read);
        }else{
            try{                            //try语句块捕捉可能的异常
                file.createNewFile();       //创建文件
                System.out.println("文件已创建");
            }catch(Exception e) {
            e.printStackTrace();    //
        }
        }
    }
}

一,文件输入/输出流 :FileInputStream和FileOutputStream类

程序运行期间的大部分数据都在内存中进行操作,当程序结局了或者关闭后,这些数据都会消失。那么能不能把这些数据都永久的保存下来呢?

答案是肯定的:用文件输入/输出流与指定的文件建立连接,把数据永久性的保存到文件里。

FileInputStream和FileOutputStream类都用来操作磁盘文件。前者具有基本的文件写入能力,后者有基本的文件读取能力。

FileInputStream有两种构造方法:

1.FileInputStream(String name):使用给定的文件名name创建一个FileInputStream对象。

2.FileInputStream(File file):这个构造方法允许在把文件连接输入流之前对文件做进一步分析。

FileOutputStream类有前者相同的参数构造方法。注意到是:创建一个FileInputStream对象时,可以指定不存在的文件名,但此文件不能是一个已经被其他程序打开的文件。

注意:FileInputStream类和FileOutputStream类都只提供了对字节或字节数组的读取方法。汉字在文件中占用两个字节,所以读取不好会出现乱码。(所以下面提到的字符流比字节流更为简便)

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

public class FileTest {
    public static void main(String[] args) {

        File file = new File("word.txt");  //创建文件对象,在当前目录
        try {
            FileOutputStream out = new FileOutputStream(file);//创建FileOutputStream类对象
            byte buy[] = "我有java课,在每周一的一二节。".getBytes();//创建数组存放字符串的二进制
            out.write(buy);                //把数组中的信息写入到文件里
            out.close();                //把流关闭
        }catch(Exception e){
            e.printStackTrace();
        }
        try {
            FileInputStream in = new FileInputStream(file);//创建FileIntputStream类对象
            byte byt[] = new byte[1024];          //创建数组,定义内存大小
            int len = in.read(byt);                //获取写入信息的长度
            System.out.println("文件中的信息是:"+ new String(byt, 0, len));//把文件中的信息输出
            in.close();                        //关闭流
        }catch(Exception e){
            e.printStackTrace();
        }
}
}

虽然java在程序结束时自动关闭所有打开的流,但是当使用完流后,显示地(主动的)关闭所有打开的流是个好习惯。

二,FileReader和FileWriter类(字符流)

FileReader和FileWriter类 对应了FileInputStream和FileOutputStream类。FileReader流顺序地读取文件,只要不关闭流,每次调用read()方法就顺序地读取源中其余内容,直到源的末尾或流被关闭。

三,带缓存的输入/输出流:BufferInputStream和BufferOutputStream

缓存是I/O的一种性能优化。缓存流为I/O流增加了内存缓存区。有了缓存区,使得在流上执行skip(), mark(), reset()等方法。

BufferInputStream类可以对所有InputStream类进行带缓存区的包装以达到性能的优化。有两个构造方法:

1.BufferInputStream(InputStream in):创建一个带有32个字节的缓存区。

2.BufferInputStream(InputStream in, int size):按指定的大小创建缓存区。

从构造方法能看出来:BufferInputStream对象位于InputStream类对象之前。 所以字节数据读取文件的过程是:文件 --> InputStream --> BufferInputStream --> 目的地

一个最优的缓存区的大小取决于所在的操作系统,可用的内存空间,机器配置。

使用BufferOutputStream输出信息和OutputStream输出信息完全一样,不过BufferOutputStream有一个flush()方法来把缓存区的信息强制输出完。

1.BufferInputStream(InputStream in):创建一个带有32个字节的缓存区。

2.BufferInputStream(InputStream in, int size):按指定的大小创建缓存区。

2019-03-24         未完,  过两天补。

原文地址:https://www.cnblogs.com/hanggai/p/10591182.html

时间: 2024-08-26 06:52:39

JAVA基础-输入输出流的相关文章

java基础-输入输出流-大文本文件读取及写入另一文本-----(此程序print部分有bug,输出不正常,原因琢磨不清了。。。)

简介:如题 import java.io.FileInputStream; import java.io.FileOutputStream; /** * @author czchina * */ public class TestStream { public static void main(String[] args) { FileInputStream fls = null; FileOutputStream fos =null; try{ fls = new FileInputStrea

Java基础——输入/输出(一)

概述 Java的IO通过java.io包下是类和接口来支持,在java.io包下主要包括输入,输出两种IO流,每种输入.输出流又可分为字节流和字符流两大类.其中字节流以字节为单位来处理输入.输出操作,而字符流以字符来处理来处理输入.输出操作. 一.File类 File类可以使用文件路径字符串来创建File实例,该文件字符串可以是绝对路径,也可以是相对路径.在默认情况下,系统总是依据用户的工作路径来解释相对路径,这个路径由系统属性“userdir”指定. 一旦创建了File对象后,就可以调用Fil

java的输入输出流(一)

java中i/o流是java中核心的一部分,以前学过,但是理解不够深入,渐渐的也就忘了,现在在从新学习下java的io处理,写下我学习的笔记,便于记忆,和总结归纳: 本文原创,转载请注明:http://blog.csdn.net/j903829182/article/details/38407723 1.java.io包中定义了多个流类型(类或抽象类)来实现输入/输出功能:可以从不同的角度进行分类: 按数据流的方向不同可以分为输入流和输出流. 按处理数据的单位不同可以分为字节流和字符流. 按照功

java.IO输入输出流:过滤流:buffer流和data流

java.io使用了适配器模式装饰模式等设计模式来解决字符流的套接和输入输出问题. 字节流只能一次处理一个字节,为了更方便的操作数据,便加入了套接流. 问题引入:缓冲流为什么比普通的文件字节流效率高? 不带缓冲的操作,每读一个字节就要写入一个字节. 由于涉及磁盘的IO操作相比内存的操作要慢很多,所以不带缓冲的流效率很低. 带缓冲的流,可以一次读很多字节,但不向磁盘中写入,只是先放到内存里. 等凑够了缓冲区大小的时候一次性写入磁盘,这种方式可以减少磁盘操作次数,速度就会提高很多! 这就是两者的区别

浅谈Java的输入输出流(转)

Java语言的输入输出功能是十分强大而灵活的,美中不足的是看上去输入输出的代码并不是很简洁,因为你往往需要包装许多不同的对象.在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输入输出,文件的操作,网络上的数据流,字符串流,对象流,zip文件流....本文的目的是为大家做一个简要的介绍. 流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接.类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流.这时候你

Java基础——输入/输出(二)

一.字节流与字符流 1.1 InputStream和Reader InputStream是抽象类,本身并不能创建实例来执行输入,它里面包含如下几个方法: 1.Int read():从输入流中读取单个字节,返回所读取的字节数据. 2.int read(byte[] b):从输入流中最多读取b.length个字节的数据,并将其存储在字节数组b中,返回实际读取的字节数. 3.int read(byte[] b,int off,int len):从输入流中最多读取len个字节的数据,并将其存储在数组b中

Java IO输入/输出流的套接

缓冲字符流BufferedInputStream / BufferedOutputStream 文件操作流 InputStream / OutputStream java 输入输出流的套接,测试一下流链的速度 因为节点流在程序中并不是很常用,一般常通过过滤流将多个流套接在一起,利用各流的特性共同处理数据,套接的多个流构成了一个流链: 我们来分析他们的运行时间.(因为在不同的系统(maxOX,Linux,WIN(32/64))上运行的时间可能都不相同)我截取了几段时间来进行对比. 1.缓冲字符流B

java文件输入输出流学习笔记

--java创建文件 File file=new File("java.txt");//此时java工作空间根目录下不一定存在java.txt //判断是否存在不存在调用File类的createNewFile方法创建java.txt File files=new File("E:\\war3"); if(!file.exists()){ file.createNewFile(); } System.out.println(file.exists());//判断文件是

Java IO输入输出流 笔记

String s = "慕课ABC"; byte[] bytes1 = s.getBytes();//转换成字节序列用的是项目默认的编码 ,编码GBK for(byte b : bytes1) { //把字节(转换成)int以16进制的方式显示, 只显示后8位 System.out.println(Integer.toHexString(b & 0xff) + " "); } //gbk编码中文占用两个字节,英文占用1个字节 //utf-8编码中文占用3个字