首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >java读写文件

java读写文件

作者头像
wo.
发布于 2021-06-15 10:53:10
发布于 2021-06-15 10:53:10
1.7K0
举报
文章被收录于专栏:了不得的专栏了不得的专栏

java读取文件

FileInputStream 是以流的方式读取文件的。

java.io.BufferedReader和java.io.BufferedWriter类各拥有8192字符的缓冲区。 当BufferedReader在读取文本文件时,会先尽量从文件中读入字符数据并置入缓冲区, 而之后若使用read()方法,会先从缓冲区中进行读取。如果缓冲区数据不足,才会再从文件中读取,

使用BufferedWriter时,写入的数据并不会先输出到目的地,而是先存储至缓冲区中。 如果缓冲区中的数据满了,才会一次对目的地进行写出。

乱码问题

Java的I/O类处理。

Reader 类是 Java 的 I/O 中读字符的父类,而 InputStream 类是读字节的父类, InputStreamReader 类就是关联字节到字符的桥梁,它负责在 I/O 过程中处理读取字节到字符的转换, 而具体字节到字符的解码实现它由 StreamDecoder 去实现, 在 StreamDecoder 解码过程中必须由用户指定 Charset 编码格式。 值得注意的是如果你没有指定 Charset,将使用本地环境中的默认字符集,例如在中文环境中将使用 GBK 编码。

TxtToSql.java 代码:

代码语言:javascript
复制
package ballTest;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;


/*
 FileInputStream 是以流的方式读取文件的。

 java.io.BufferedReader和java.io.BufferedWriter类各拥有8192字符的缓冲区。
  当BufferedReader在读取文本文件时,会先尽量从文件中读入字符数据并置入缓冲区,
  而之后若使用read()方法,会先从缓冲区中进行读取。如果缓冲区数据不足,才会再从文件中读取,

  使用BufferedWriter时,写入的数据并不会先输出到目的地,而是先存储至缓冲区中。
  如果缓冲区中的数据满了,才会一次对目的地进行写出。
*/

/*
 Java的I/O类处理如图:
 
 Reader 类是 Java 的 I/O 中读字符的父类,而 InputStream 类是读字节的父类,
 InputStreamReader 类就是关联字节到字符的桥梁,它负责在 I/O 过程中处理读取字节到字符的转换,
  而具体字节到字符的解码实现它由 StreamDecoder 去实现,
  在 StreamDecoder 解码过程中必须由用户指定 Charset 编码格式。
  值得注意的是如果你没有指定 Charset,将使用本地环境中的默认字符集,例如在中文环境中将使用 GBK 编码。

*/
public class TxtToSql {
    public static void main(String[] args) throws IOException {
        read();
    }

    //读取1w数据txt文本,按行分割
    public static void read() throws IOException{    
        FileInputStream in = new FileInputStream("F:\\数据\\history.txt");
        
        //Java读取数据流的时候,一定要指定数据流的编码方式,否则将使用本地环境中的默认字符集。
        BufferedReader br = new BufferedReader(new InputStreamReader(in));

        //BufferedReader是可以按行读取文件
        String str = null;
        while((str = br.readLine()) != null)
        {
            //spilt
            spilt(str);
            System.out.println("--------------------------------------------");
        }
            
        //close
        in.close();
        br.close();

    }
    
    //按","分隔字符串,生成sql语句
    public static void spilt(String str) throws IOException{
        String sql = "insert into history values(";
        //字符串分割--String.split()
        String[] ss = str.split(",");
        System.out.println(ss);
        for (String string : ss) {
            sql = sql+ "'" + string +"'," ;
        }
        if(ss.length != 101){
            int len = 101 - ss.length;
            for(int i= 1; i<len;i++){
                sql = sql + "'',";
            }
        }
        
        sql = sql + "'');";
        System.out.println(sql);
        
        //write
        write(sql);
    }
    
    //将重新生成的sql保存为SQL文件
    public static void write(String sql) throws IOException{
        FileWriter fw = new FileWriter("F:\\数据\\history.sql", true);
        BufferedWriter bw = new BufferedWriter(fw);
        bw.append(sql + "\r\n");// 往已有的文件上添加字符串
        bw.close();
        fw.close();
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-05-16,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • java读取文件
  • 乱码问题
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档