java读写文件

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 代码:

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();
    }
}

发表评论

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