
如果txt,xls,按行读,用特定的字符作分隔符来拆分,读一行处理一行,直到结束,导入都是这样的.
给个txt的案例给你看看:
File logFile = new javaioFile("d://PartInputLogtxt"); //
ins = formgetFile()getInputStream(); //读取数据流
workBook = WorkbookgetWorkbook(ins); //打开工作簿
sheet = workBookgetSheet(0); //打开SHEET
int rowSize = sheetgetRows(); //获取总行数
for(int i=0;i<rowSize;i++){
if(sheetgetCell(0, i)getContents()trim()equals(""))break;
String gysNo = sheetgetCell(0, i)getContents()trim();//获取第i行第1列的具体数据
String bpNo = sheetgetCell(1, i)getContents()trim(); //获取第i行第2列的具体数据
String numStr = sheetgetCell(2, i)getContents()trim(); //获取第i行第3列的具体数据
}
//数据都可以读取到剩下的就在循环中插入了
通常对用户上传的需要保存到数据库中。解决方法一般有两种:一种是将保存的路径存储到数据库;另一种是将以二进制数据流的形式直接写入数据库字段中。以下为具体方法:
一、保存的上传路径到数据库:
string uppath="";//用于保存上传路径
//获取上传的文件名
string fileFullname = thisFileUpload1FileName;
//获取上传的时间,以时间作为的名字可以防止重名
string dataName = DateTimeNowToString("yyyyMMddhhmmss");
//获取的文件名(不含扩展名)
string fileName = fileFullnameSubstring(fileFullnameLastIndexOf("\\") + 1);
//获取扩展名
string type = fileFullnameSubstring(fileFullnameLastIndexOf("") + 1);
//判断是否为要求的格式
if (type == "bmp" || type == "jpg" || type == "jpeg" || type == "gif" || type == "JPG" || type == "JPEG" || type == "BMP" || type == "GIF")
{
//将上传到指定路径的文件夹
thisFileUpload1SaveAs(ServerMapPath("~/upload") + "\\" + dataName + "" + type);
//将路径保存到变量,将该变量的值保存到数据库相应字段即可
uppath = "~/upload/" + dataName + "" + type;
}
二、将以二进制数据流直接保存到数据库:
引用如下命名空间:
using SystemDrawing;
using SystemIO;
using SystemDataSqlClient;
设计数据库时,表中相应的字段类型为iamge
保存:
//路径
string strPath = thisFileUpload1PostedFileFileNameToString ();
//读取
FileStream fs = new SystemIOFileStream(strPath, FileModeOpen, FileAccessRead);
BinaryReader br = new BinaryReader(fs);
byte[] photo = brReadBytes((int)fsLength);
brClose();
fsClose();
//存入
SqlConnection myConn = new SqlConnection("Data Source=;Initial Catalog=stumanage;User ID=sa;Password=123");
string strComm = " INSERT INTO stuInfo(stuid,stuimage) VALUES(107,@photoBinary )";// *** 作数据库语句根据需要修改
SqlCommand myComm = new SqlCommand(strComm, myConn);
myCommParametersAdd("@photoBinary", SqlDbTypeBinary, photoLength);
myCommParameters["@photoBinary"]Value = photo;
myConnOpen();
if (myCommExecuteNonQuery() > 0)
{
thisLabel1Text = "ok";
}
myConnClose();
读取:
连接数据库字符串省略
myconOpen();
SqlCommand command = new
SqlCommand("select stuimage from stuInfo where stuid=107", mycon);//查询语句根据需要修改
byte[] image = (byte[])commandExecuteScalar ();
//指定从数据库读取出来的的保存路径及名字
string strPath = "~/Upload/zhangsanJPG";
string strPhotoPath = ServerMapPath(strPath);
//按上面的路径与名字保存文件
BinaryWriter bw = new BinaryWriter(FileOpen(strPhotoPath,FileModeOpenOrCreate));
bwWrite(image);
bwClose();
//显示
thisImage1ImageUrl = strPath;
采用俩种方式可以根据实际需求灵活选择。
File src=new File("原文件地址");
InputStream inps = new FileInputStream(file) ;//输入流
File des = new File("目的文件地址") ;
OutputStream ops = new FileOutputStream(des) ;//输出流
if(!desisExist()){//不存在,新建
descreateNewFile() ;
}
int temp = 0 ;
while((temp=inpswrite!)=-1){//读入,判断是否读取结束
opswrite(temp) ;//写入
}
try{
opsflush() ;
opsclose() ;
inpsclose() ;
}catch(Exception e){
}
纯手打,可能会有些错误,但是总体思路是正确的,具体的可以参考JavaIO包!看看API
首先建好数据库。假设下面的数据库已建好,数据表名为fileinfo
id filename filesize extension createtime
分别代码,编号 文件名 文件大小 扩展名 文件创建时间
1,创建数据表
第二步。在对应的文件夹下复制好文件。假设当前目录为image,该目录下有下列文件。
第三步,信息入库,本人这里以C#为例。
public static InsertFilesInfo(string path) //创建方法。这里采用参数传递,方便对不同目录下的文件进行遍历入库
{
string filename=""; ///定义变量,用于存放文件名
string filesize=""; ///定义变量,用于存放文件大小
string extension="";/// 定义变量,用于存放文件扩展名
string createtime=""; ///定义变量,用于存放文件创建时间
SystemIODirectoryInfo dir= new SystemIODirectoryInfo(SystemWeb>
///先获取相应的目录。并实例化目录对象。方便获取该 目录下的文件。
SystemIOFileInfo[] fInfo = dirGetFiles();
///创建文件信息集合,将path参数指定的目录下的文件全部获取到,存入fInfo这个文件信息数组。
foreach (SystemIOFileInfo f in fInfo) ///开始遍历数组。将所有的文件遍历出来。
{
filename = fNameToString();
filesize=fLengthToString();
extension=fExtensionToString();
createtime=fCreationTimeToString()
///上述 *** 作已经获取到文件相关信息。
下一步入库。
入库,假设数据连接对象已创建好,具体的数据连接代码,这里不再提供了。
string sql="insert fileinfo (filename,filesize,extension,createtime) values ('" + filename + "','"+ filesize+"','"+ extension+"','"+ createtime+"'")";
cmdCommandType='Text';
cmdCommandText=sql;
cmdExecuteNoQuery();
///文件信息已经入库了。这是循环入库,有多少个文件,数据库表中就会有多少条信息。
}
}
另外可以使用php。原理都是一样的。都是先遍历目录下所有的文件,再将文件信息存储。再遍历。再入库。
数值是没有必要分几进制的,它在内存中就是二进制保存的。只是为了方便人们查看,可以转为n进制的格式显示在文本框中进行显示的。
所以
1 buf 就不要转为字符串了,直接以二进制格式存入数据库。下次也是以二进制的形式取出(就是byte[])
2 richTextBox1 要显示二进制也好,16进制也好 根据实际需要决定。象你上面的例子,builder 中的内容直接插入到richTextBox1中就好了。
1将Image图像文件存入到数据库中
我们知道数据库里的Image类型的数据是"二进制数据",因此必须将图像文件转换成字节数组才能存入数据库中
要这里有关数据的 *** 作略写,我将一些代码段写成方法,方便直接调用
//根据文件名(完全路径)
publicbyte[](stringfileName)
{
FileStreamfs=newFileStream(fileName,FileModeOpen);
int=(int)fsLength;
byte[]image=newbyte[];
fsRead(image,0,);
fsClose();
returnimage;
}
//另外,在ASPNET中通过FileUpload控件得到的图像文件可以通过以下方法
publicbyte[](FileUploadFileUpload1)
{
Streamstream=FileUpload1PostedFileInputStream;
byte[]photo=newbyte[FileUpload1PostedFile];
streamRead(photo,0,FileUpload1PostedFile);
streamClose();
returnphoto;
}
2从SQLServer数据库读取Image类型的数据,并转换成bytes[]或Image图像文件
//要使用要加载usingSystemDataSqlClient命名空间
//将数据库中的Image类型转换成byte[]
publicbyte[]SetImage(reader)
{
return(byte[])reader["Image"];//Image为数据库中存放Image类型字段
}
//将byte[]转换成Image图像类型
//加载以下命名空间usingSystemDrawing;/usingSystemIO;
usingSystemDataSqlClient;/
publicImage(byte[]mybyte)
{
Imageimage;
=new(mybyte,0,mybyteLength);
image=ImageFromStream();
returnimage;
}
以上就是关于java怎么解析指定的文件,并保存到数据库全部的内容,包括:java怎么解析指定的文件,并保存到数据库、批量添加图片后怎么存入数据库、java怎么用IO流把一个文件(SQLite数据库文件)复制到另一个位置等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)