鍵盤輸入流,接收大文本數據,並輸入一個圖片路徑,之後將這些數據保存在數據表中

此程序來源於《java開發實戰經典》第17章課後習題3.

前面是幾個是使用的方法類

//此類的方法是建立一個以現在時間分鐘爲標誌的txt文件名.和前一分鐘文件名.(不是文件)
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;


class dateTime{
private SimpleDateFormat sdf=null;//聲明日期格式化操作對象。
public String getDate() {//得到完整的日期,格式爲:yyyy-MM-dd HH:mm:ss.SSS
this.sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
return this.sdf.format(new Date());
}

public String getDateComplete() {

//得到完整的日期,格式爲:yyyy年MM月dd日HH時mm分ss秒SSS毫秒

this.sdf=new SimpleDateFormat("yyyy年MM月dd日HH時mm分ss秒SSS毫秒");
return this.sdf.format(new Date());
}
    public String getTimeStamp() {//得到時間戳:yyyyMMddHHmmssSSS
this.sdf=new SimpleDateFormat("yyyyMMddHHmmssSSS");
return this.sdf.format(new Date());
}

    public long getTimeStampMinute() {

//得到得到時間戳:yyyyMMddHHmm,精確到分,把秒和毫秒截掉。

    String str=this.getTimeStamp();
    long n=Long.parseLong(str.substring(0, 11));
    return n;
    }
}
public class TemporaryFile {
long no=new dateTime().getTimeStampMinute();
long pno=no-1;
String ff="D:"+File.separator+"ZCA"+File.separator+"Java"+File.separator+"AndrewPackage"+File.separator;
String f1=ff+"Andrew"+no+".txt";
String pf1=ff+"Andrew"+pno+".txt";
public File getFile() {//這個方法得到以當時時間爲標記的文件名
return new File(f1);
}
public File getPFile() {//這個方法得到以當時時間前一面爲標記的文件名
return new File(pf1);
}


}

//這個類新建一個文件名,文件路徑由外部傳入,用於分隔符的轉換
import java.io.File;
import java.io.IOException;
public class CreateFile {
String s="";
File f;
public  CreateFile(String str) {
String ps = str.trim();// 馬蛋,這個也不能少,實際讀取的可能比字符長,出現空格造成路徑出錯。
char c[] = ps.toCharArray();
for (int i = 0; i < c.length; i++) {
if (String.valueOf(c[i]).equals("\\")) {// 將/換成File.separator纔是正道,以適應各種系統。
s = s + File.separator;// 在遇到其他系統,對分隔符的判斷還要擴大。
} else {
s = s + c[i];
}
}
System.out.println(s);
f = new File(s);
try {
f.createNewFile();
} catch (IOException e) {
e.printStackTrace();
System.out.println("新文件路徑有誤,無法創建!");
System.exit(1);
}
}

}

//從臨時文件中複製文件到有路徑名的文件。
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class Copy {
public Copy(String sf) {

File f1=new TemporaryFile().getFile();

//實例化f1,取得以當時時間爲標記的文件,精確到分

if(!f1.exists()) {

f1=new TemporaryFile().getPFile();

//如果沒有找到f1,考慮到時間程序的延遲,去找到以當時時間前一分鐘爲標記的文件

}
File f2=new File(sf);
if(!f1.exists()) {
System.out.println("臨時存儲文件不存在,無法複製!");
System.exit(1);
}
InputStream input=null;//數據輸入流
OutputStream out=null;//數據輸出流
try {
input=new FileInputStream(f1);//實例化數據輸入流
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
out=new FileOutputStream(f2);//實例化數據輸出流
} catch (FileNotFoundException e) {
e.printStackTrace();
}

if(input!=null&&out!=null) {

//準備好了輸入輸出流,這個不是很理解?別的都是直接開工

int temp=0;
try {
while((temp=input.read())!=-1) {
out.write(temp);
}
System.out.println("複製完成!");
}catch(IOException ee) {
ee.printStackTrace();
System.out.println("複製失敗!");
}
try {
input.close();
out.close();
}catch(IOException ee){
ee.printStackTrace();
}


}
}
}

主方法

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.ArrayList;
import java.util.List;
public class AndrewK17_163 {
public static final String DBDRIVER = "com.mysql.jdbc.Driver";// 在CMD中是="org.git.mm.masql.Driver".
public static final String DBURL = "jdbc:mysql://localhost:3306/andrew?useUnicode=true&characterEncoding=utf-8&useSSL=false";
public static final String DBUSER = "root";
public static final String DBPASS = "3269";
public static void main(String[] args) throws Exception {
InputStream input = System.in;
File f = new TemporaryFile().getFile();//新建一個臨時文件夾
OutputStream out = null;
out = new FileOutputStream(f);
int temp = 0;
System.out.println("請輸入文本內容:");
boolean flag0 = false;
List<Byte> allList = null;// List只接收對象,不接收數據類型
allList = new ArrayList<Byte>();
if (input != null && out != null) {
while ((temp = input.read()) != -1) {
if (flag0 == false) {
out.write(temp);//這裏是一個流數據,處理大文本應該很快。
if ((char) temp == '\n') {//通過回車截斷輸入流,改變輸出方向
flag0 = true;

System.out.print("請輸入文件路徑(盤符:\\文件夾名\\文件夾名\\文件名……):");

                                                                // 實際在控制檯中輸入的是盤符:\文件夾名\文件夾名\文件名……

continue;//跳過這次循環進入下一次。
}
}
if (flag0 == true) {
if ((char) temp == '\n') {
break;
}
allList.add((byte) temp);//截斷的輸入流後面進入這個allList.
}
}
System.out.println("文本導入臨時txt完成");
}
Byte b[] = allList.toArray(new Byte[] {});
byte b1[] = new byte[b.length];
for (int i = 0; i < b.length; i++) {//將包裝類變爲基本數據類
b1[i] = b[i];
}

String str = new String(b1).trim();

//讀取的文本在轉換的時候有可能在兩邊有空格,執行這個操作有備無患。

new CreateFile(str);// 調用文件名製作方法,主要是把\換成File.separator.
input.close();
out.close();
new Copy(str);//引用複製操作方法,將開始輸入的文本存入str路徑的文件
Connection conn = null;
Class.forName(DBDRIVER);
conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
PreparedStatement pstmt0 = null;
PreparedStatement pstmt1 = null;
PreparedStatement pstmt2 = null;
String sqal0 = "drop table if exists 大文本表格blob";
String sqal1 = "create table 大文本表格blob(id int AUTO_INCREMENT,bigtxtname varchar(30) NOT NULL,TxtContent LONGBLOB,PRIMARY KEY(id))";
String sqal2 = "INSERT INTO 大文本表格blob(bigtxtname,TxtContent)VALUES(?,?)";
pstmt0 = conn.prepareStatement(sqal0);//實例化patmt0,此操作用於刪除要創建的表格(如果表格存在)。
pstmt0.executeUpdate();
pstmt0.close();
pstmt1 = conn.prepareStatement(sqal1);//實例化pstmt1,創建表格。
pstmt1.executeUpdate();
pstmt1.close();
pstmt2 = conn.prepareStatement(sqal2);//實例化patmt2,此操作用於插入數據。
File tf = new File(str);
InputStream inputt = new FileInputStream(tf);//通過輸入流讀取文件
pstmt2.setString(1, "java數據庫編程習題");//設置第一個?
pstmt2.setBinaryStream(2, inputt, tf.length());//設置第二個?
pstmt2.executeUpdate();
pstmt2.close();
conn.close();//數據庫關閉
}


}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章