Java文件读写

Java文件读写1.%g用于输出科学计数法2.用printf输出换行除了’\n’,还可以用’%n’3.File类的几个构造方法:1)File(StringdirectoryPath)2)File(StringdirectoryPath,Stringfilename)3)File(FiledirObj,Stringfilename)4)File(URIuri)注意,这里的对象指的可能是一个…

大家好,又见面了,我是你们的朋友全栈君。

1.%g用于输出科学计数法

2.用printf输出换行除了’\n’,还可以用’%n’

3.File类的几个构造方法:
1)File(String directoryPath)
2)File(String directoryPath,String filename)
3)File(File dirObj,String filename)
4)File(URI uri)
注意,这里的对象指的可能是一个我们通常所说的文件,也可能是一个目录(路径);可以是个具体存在的文件,也可以是个尚未存在的文件。

4.所谓的数据流是指一组有顺序的、有起点和终点的字节集合

5.Java程序不能直接操纵I/O设备,而是在程序和设备之间加入了一个中间介质,这就是流。流是数据传输的抽象表达,与具体设备无关,程序一旦建立了流,就可以不用理会起点或终点是何种设备

6.输入流将数据从文件、标准输入或者其它外部设备输入加载到内存。

7.输入输出数据流:
1)以字节流传输的输入数据流都是抽象类InputStream的子类;以字符流传输的输入数据流都是抽象类Reader的子类。
2)以字节流传输的输出数据流都是抽象类OutputStream的子类;以字符流传输的输出数据流都是抽象类Writer的子类。

8.类File一般不涉及文件内部的具体内容,而是从整体上对文件进行处理,如获取各种各样的文件消息或者删除文件。类File不仅可以对文件进行操作,而且还可以对路径进行操作。

9.父目录:当前所在目录的上一层目录(文件夹)
子目录:当前所在目录的下一层目录(文件夹)

10.mark()通常与reset()方法配合使用,可重复读取输入流所指定的字节数据。例如:若fis是一个输入流,如果想读取相同的字 节数据到字节数组b1和b2中,可通过以下语句实 现,先标记输入流中当前位置,读取数据后重置 读取位置。

fis.mark(5);
byte[] b1=new byte[5], byte[] b2=new byte[5],
 fis.read(b1,0,5);
fis.reset();
 Fis.read(b2,0,5);

11.mark(int readlimit)方法表示标记当前位置,并保证在mark以后最多可以读取readlimit字节数据。reset()方法表示重置移动读取指针到上一次mark的地方。

12.FileOutputStream用于向本地文件中写入数据,注意,是往本地文件中写入,不是向控制台输出。

13.FileInputStream不支持缓冲和做标记

14.InputStream和OutputStream都是抽象类,不能通过new OutputStream()的方法构造各自的实例。我们可以通过构造它们的子类的实例方式构造该类型的实例(类似于List和Arraylist的关系)。一个构造InputStreamReader实例的例子:

new InputStreamReader(new FileInputStream("data.txt"));

15.FilterInputStream:过滤器输入流是其它带过滤器的输入流的超类,它的方法和InputStream的方法完全一样,也就是说前者只是简单地重写了后者的所有方法。
1)它的构造方法是FilterInputStream(InputStream in)。过滤器输入流以一个InputStream为自己的数据。
2)成员变量:protected InputStream in。在构造方法里会对这个变量赋值,即this.in=in

16.当创建BufferedInputStream或者BufferedOutputStream的实例时,均会在内存中开辟一个字节数组的存储单元(一般称为缓存),默认为512字节,用来存放数据流中的数据。

17.通常情况下,缓冲区的大小应为内存页或者磁盘块等的整数倍,以避免页或块的浪费。

18.write(int b):将b转成二进制后,把b的低8位写到输出流。把所有32位都写到输出流的函数是writeInt(int b)。

19.使用对象流读取和写入对象时,要保证对象是串行化的。(串行化的概念:指对象通过把自己转化为一系列字节,记录字节的状态数据,以便再次利用的这个过程)

20.串行化(Serializable)是Java.io包中定义的一个接口。这个接口中没有定义任何方法,只是一个特殊的标记,用来告诉编译器,这个对象参加了串行化的协议,可以把它串行化。一个类要具有可串行化的特性就必须实现接口Java.io.Serializable。

21.有些对象不能串行化,例如Thread对象,FileInputStream对象以及FileOutputStream对象等,因为其状态是暂时的。

22.对不希望串行化的对象要用关键字transient修饰。

23.创建管道输入流对象(PipeInputStream):

public PipeInputStream();
public PipeInputStream(PipeOutputStream src);

24.创建管道输出流对象(PipeOutputStream):

public PipeOutputStream();
public PipeOutputStream(PipeInputStream src)

25.被连接的管道流必须没有与任何别的管道流连接,否则会抛出IOException异常,管t道输出流是往管道中写数据,管道输入流是往管道中读数据。(类似文件和文件流的关系)因为InputStream本来就是字节输入流,InputStream对应的字符流是Reader类。

26.InputStreamReader类继承自Reader类,通过其read方法从字节流中读取一个或者多个字节数据转换为字符数据。它可以接一个缓冲流来提高效率。OutputStreamWriter同理。

27.InputStream构造方法摘要 :出处

1)InputStreamReader (InputStream  in)  创建一个使用默认字符集的 InputStreamReader。 
2)InputStreamReader (InputStream  in, Charset  cs)  创建使用给定字符集的 InputStreamReader。 
3)InputStreamReader (InputStream  in, CharsetDecoder  dec)   创建使用给定字符集解码器的 InputStreamReader。 
4)InputStreamReader (InputStream  in, String  charsetName)  创建使用指定字符集的 InputStreamReader。

28.一种高效的写法:

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

29.与InputStreamReader是字节转字符不同,OutputStreamWriter是字符转字节。反正外界传进来是字节,往外界输出的也是字节。

30.BufferReader的两个构造方法:

BufferedReader(Reader in);
BufferedReader(Reader in,int size);

31.小结:
1)File,FileStream是处理本地文件的类
2)DataStream是一个过滤流的子类,借此可以读写各种基本数据。
3)BufferedStream的作用是在数据送到目的地之前先缓存,达到一定数量时再送到目的地,以提高程序的运行效率。
4)PipedStream适合于一个处理的输出作为另一个处理的输入的情况。

LAB11(文件读写):
1.FileInputStream(文件输入流)是从系统的某个文件中获得输入字节
FileOutputStream(File file)是向File对象的文件写入数据

2.无参的read()方法返回int类型,返回值是数据下一个字节的字节码,如果已到达流的最后面了,就返回-1;带参数的read()方法返回的是读取的字节数(到达数据的末端返回值为-1)

3.read()源码:

//带参
    public int read(byte b[], int off, int len) throws IOException { 
   
    //这里是一些前期判断,我们的buffer[]数组不能为空,偏移量一开始不能比0小,要读取的字节长度也不能比0小
        if (b == null) { 
   
            throw new NullPointerException();
        } else if (off < 0 || len < 0 || len > b.length - off) { 
   
            throw new IndexOutOfBoundsException();
        } else if (len == 0) { 
   
            return 0;
        }

        int c = read();
        if (c == -1) { 
   
            return -1;
        }
        b[off] = (byte)c;

        int i = 1;
        try { 
   
            for (; i < len ; i++) { 
   
                c = read();
                if (c == -1) { 
   
                    break;
                }
                b[off + i] = (byte)c;
            }
        } catch (IOException ee) { 
   
        }
        return i;
    }
    //--------------------分割线--------------------------
    public int read(byte b[]) throws IOException { 
   
        return read(b, 0, b.length);
    }
//不带参
/** * Reads the next byte of data from the input stream. The value byte is * returned as an <code>int</code> in the range <code>0</code> to * <code>255</code>. If no byte is available because the end of the stream * has been reached, the value <code>-1</code> is returned. This method * blocks until input data is available, the end of the stream is detected, * or an exception is thrown. * * <p> A subclass must provide an implementation of this method. * * @return the next byte of data, or <code>-1</code> if the end of the * stream is reached. * @exception IOException if an I/O error occurs. */
    public abstract int read() throws IOException;

4.用FileInputStream向文件中写入内容的步骤:
1)建立File对象:File in=new File(String pathname)
2)构造字符串:String text=“XXXXX”
3)字符串转byte,并指定编码方式:byte[] a=text.getBytes(“UTF-8”)
4)建立文件输出流:FileOutputStream o=new FileOutputStream(File filename)
5)开始写入:o.write(a)
6)关闭输出流:o.close()

5.删除String中的特定字符串:用replace方法即可,把待删除字符串替换成""即可达到删除字符串的目的。

6.获取子字符串:String.subString(int beginindex,int endindex),endindex表示子字符串在原字符串中的结束位置,也就是’\0’的位置。这个方法还可以用来拼接字符串,从而实现删除特定位置字符串的目的。

7.FileReader介绍:
1)Reader类是定义Java的流式字符输入模式的抽象类。
2)writer类是定义流式字符输出的抽象类
3)FileReader类创建了一个可以读取文件内容的Reader类
4)FileWriter创建一个可以写文件的Writer类
用FileReader类写文件示例:

  import  java.io.*;

    class FileWriterDemo { 
   

        public static void  main (String args[ ]) throws Exception { 
   

            String source = "learn how to write to file";

            FileWriter  f1 = new FileWriter("file1.txt");

            for  (int i=0; i<buffer.length; i +=2) { 
   

                f1.write (buffer[i]);

             }

            fo.close();

             FileWriter f2 = new FileWriter("file2.txt");

            f2.write(buffer);

            f2.close();

            FileWriter  f3 = new FileWriter ("file3.txt");

            f2.write(buffer,buffer.length-buffer.length/4, buffer.length/4);

        }

}

8.用FileWriter.write(String)向文件中写入字符串时,如果字符串中有换行,那么构造这个字符串的时候你得在换行符\n前加一个\r,因为在Windows系统里面\r\n才是换行

9.解决读取文件时乱码问题:先FileInputStream,然后InputStreamReader,最后是BufferedReader,就是文件–》按字节读取–》按流读取

public static void copyFile (String sourceFile, String targetFile) throws IOException { 
   
        FileWriter fw_o=new FileWriter(targetFile);
        FileInputStream fis=new FileInputStream(sourceFile);
        InputStreamReader fr=new InputStreamReader(fis,"gbk");//重点是这个,我也不知道为什么用utf-8不行
        BufferedReader br=new BufferedReader(fr);
        BufferedWriter bw=new BufferedWriter(fw_o);
        String s=new String();
        int i=0;
        while ((s=br.readLine())!=null){ 
   
            System.out.println(s);
            bw.write(s);
            bw.newLine();
        }
        bw.close();
    }

原文件内容:
在这里插入图片描述
运行输出:
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/159363.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • CAS单点登录系列之原理简单介绍[通俗易懂]

    CAS单点登录系列之原理简单介绍[通俗易懂]1.SSO简介1.1单点登录定义单点登录即在多系统的环境中,登录单方系统,就可以在不用再次登录的情况下访问相关受信任的系统。2.CAS简介CAS(CenterAuthenticationService)是耶鲁大学研究的一款开源的单点登录项目,主要为web项目提供单点登录实现,属于WebSSO。待续…,PS:找时间继续写…单点登录实现方式:单点登录的三…

    2022年5月2日
    60
  • lnk2019无法解析的外部符号_declspec_error lnk1120无法解析的外部命令

    lnk2019无法解析的外部符号_declspec_error lnk1120无法解析的外部命令1.前言errorLNK2019:无法解析的外部符号这个错之前见过很多次,能知道最根本的原因在于链接过程中没有搜索到程序用到的库文件,即*.lib。笔记本重装了系统,有32Bit升到64Bit,运行VTK程序时,始终报错如下:1>  正在创建库E:\Driverprogram\imgport\Debug\imgport.lib和对象E:\Driverprog

    2022年10月6日
    2
  • 怎样用python画爱心_女生节前夕特别篇:如何用python画爱心[通俗易懂]

    怎样用python画爱心_女生节前夕特别篇:如何用python画爱心[通俗易懂]亲爱的男生们:展信佳!明天就是女生节了,你们是否还在为送什么而焦头烂额,是否还在俗套地沿用着前辈们的套路。挂横幅——让女生们梦回八九十年代的大学生活?拍视频——加入抖音快手之流?送礼物——非常棒!!可惜没钱?如何能够送出实惠而又有逼格的礼物?今天,我就给大家隆重地介绍一个简单而又高大上的方法——用python来制作一个爱心!!你可能会问,太难了,我不会python怎么办?不要怕,超级简单的,相信我…

    2025年9月24日
    7
  • linux 中了挖矿病毒

    linux 中了挖矿病毒文章目录中毒特征磁盘cpu跑满100%如何处理反复发作中毒特征磁盘cpu跑满100%如何处理电脑中了挖矿病毒ps-aux|grepkinsingroot194470.01.811917235084?Sl4月150:04/var/tmp/kinsingroot272470.00.0112728…

    2022年6月9日
    47
  • 【ubuntu修改密码】ubuntu忘记密码,修改密码[通俗易懂]

    【ubuntu修改密码】ubuntu忘记密码,修改密码[通俗易懂]ubuntu忘记密码,修改密码在启动ubuntu时,迅速按下shift键,进入grub启动菜单界面,选中高级选项,回车;选择recoverymode模式,即系统和密码恢复模式。然后按e启动编辑上下移动光标到recoverynomodeset位置,删除recoverynomodeset删除之后,在该位置添加quietsplashrwinit=/bin/bash,然后按f10按下f10后,进入编辑页面,在这里可以通过输入passwd来重置root账户密码,也可以通过输入passw

    2022年9月29日
    4
  • 电脑主板插线方法图解_JFP1主板插线图解

    电脑主板插线方法图解_JFP1主板插线图解

    2021年11月17日
    208

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号