Java一行一行的读文件和简单的写文件
读
在java的实验作业中,有一个是从我们的txt文件中读取矩阵。其中数与数之间是用\t隔开。行与行之间是用\n跳过。本人java学艺不精,所以我只有自行询问度娘。得知了一个可以从文件中一行一行的读取内容的函数readLn()。并且在读取过程中可以直接把每行的换行符去掉。可谓非常方便(其他盆友如果需要换行符自己加上去即可)
首先我们了解下这个类
模块 java.base
包 java.io
Class BufferedReader
- java.lang.Object继承
-
- java.io.Reader中
-
- java.io.BufferedReader中
- 所有已实现的接口:
Closeable
,AutoCloseable
,Readable
- 直接已知子类:
LineNumberReader
公共类BufferedReader 扩展了Reader
从字符输入流中读取文本,缓冲字符,以便有效地读取字符,数组和行。
可以指定缓冲区大小,或者可以使用默认大小。对于大多数用途,默认值足够大。
通常,由Reader构成的每个读取请求都会导致相应的读取请求由基础字符或字节流构成。因此,建议将BufferedReader包装在任何read()操作可能代价高昂的Reader上,例如FileReaders和InputStreamReaders。例如,
BufferedReader in = new BufferedReader(new FileReader(“foo.in”));//"foo.in"直接换上我们的要读取的文件的路径(相对绝对都可以)。我们就可以用这个方法了。
注意 new FileReader()方法个人觉得相当于c语言的获得文件指针
将缓冲指定文件的输入。如果没有缓冲,read()或readLine()的每次调用都可能导致从文件中读取字节,转换为字符,然后返回,这可能是非常低效的。
在接着我们使用in.readLine()就可以了。它会一次读取被读取文件的每一行,并且返回这一行形成的String line = in.readLine();//读取文件中矩阵的一行
接着我们就可以使用它们来进行我们的操作
使用完成后记得使用in.close()来关闭避免浪费资源
写
由于题目比较简单我也没有深究。只使用到了write()方法
那么让我们看看这个类
模块 java.base
包 java.io
类FileWriter
- java.lang.Object继承
-
- java.io.Writer中
-
- java.io.OutputStreamWriter中
-
- java.io.FileWriter
- 所有已实现的接口:
Closeable
,Flushable
,Appendable
,AutoCloseable
公共类FileWriter 扩展了OutputStreamWriter
用于编写字符文件的便捷类。此类的构造函数假定默认字符编码和默认字节缓冲区大小是可接受的。要自己指定这些值,请在FileOutputStream上构造OutputStreamWriter。
文件是否可用或是否可以创建取决于底层平台。特别是某些平台允许一次只打开一个文件FileWriter
(或其他文件写入对象)来打开文件。在这种情况下,如果涉及的文件已经打开,则此类中的构造函数将失败。
FileWriter
用于编写字符流。要编写原始字节流,请考虑使用a FileOutputStream
。
我使用的是第三个构造方法。在没有参数或者参数为false的情况下,他会清空这个文件。在参数为true的情况下,他会在原有数据的基础上添加内容。
fw = new FileWriter("src/P1/txt/6.txt",true);
public void write(char[] cbuf, int off, int len) throws IOException
Writes a portion of an array of characters.
- Specified by:
write
in classWriter
- Parameters:
cbuf
- Buffer of charactersoff
- Offset from which to start writing characterslen
- Number of characters to write- Throws:
IndexOutOfBoundsException
- Ifoff
is negative, orlen
is negative, oroff + len
is negative or greater than the length of the given arrayIOException
- If an I/O error occurs
若果你直接想写入其中我们就直接加入字符串就可以了
fw.write(magic[i][j] + "\t");
关于off表示偏移量
len表示你要截取的长度