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