❶ java程序中怎样用文件存储数据
对于一些小文件,我们可以一次性读取它的所有字节,然后一次提交到数据库
///
/// 这个方法演示了如何一次提交所有的字节。这样导致的结果是:应用程序立即需要申请等同于文件大小的内存
static void SubmitFileByOnce() {
string file = @"F:\功夫熊猫.rmvb";//文件大小为519MB
byte[] buffer = File.ReadAllBytes(file);
using (SqlConnection conn = new SqlConnection("server=(local);database=demo;integrated security=true")) {
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "INSERT INTO Files(FileName,FileContents) VALUES(@fileName,@fileContents)";
cmd.Parameters.AddRange(
new[]
{
new SqlParameter("@fileName",file),
new SqlParameter("@fileContents",buffer)
});
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
}
}
但是,上面的方法有几个问题,主要体现在如果文件比较大的话
它需要一次性很大的内存,具体数据等同于文件大小。因为File.ReadAllBytes方法是将所有字节全部读入到内存。
它会导致提交失败,就是因为数据太大了。数据库也会拒绝。
那么,我就对这个方法做了一下改进,将文件拆分为5MB一段,也就是说,此时每次申请的内存只有5MB。这就大大地提高了可用性。
/// 这个方法是将文件切分为5MB的块,每次只是提交5MB,所以可能多次提交,但内存占用就比较小
static void SubmitFileStepByStep() {
string file = @"F:\功夫熊猫.rmvb";//以这个文件为例,大小为519MB,一共需要的时间大约94秒。还是有点慢的,所以还可能需要进行压缩
FileStream fs = new FileStream(file, FileMode.Open);
byte[] buffer = new byte[5 * 1024 * 1024];
int readCount;
using (SqlConnection conn = new SqlConnection("server=(local);database=demo;integrated security=true"))
{
conn.Open();
while ((readCount = fs.Read(buffer, 0, buffer.Length)) > 0)
{
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "INSERT INTO Files(FileName,FileContents) VALUES(@fileName,@fileContents)";
cmd.Parameters.AddRange(
new[]
{
new SqlParameter("@fileName",file),
new SqlParameter("@fileContents",buffer)
});
cmd.ExecuteNonQuery();
}
}
conn.Close();
}
}
这样的话,有一个后果就是一个文件,可能在数据库中会有多条记录。所以在读取的时候,我们需要对其进行合并
static void DownloadFile() {
string file = @"F:\功夫熊猫.rmvb";
string destfile = @"E:\Temp\Temp.wmv";
using (SqlConnection conn = new SqlConnection("server=(local);database=demo;integrated security=true"))
{
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "SELECT FileContents FROM Files WHERE FileName=@fileName";
cmd.Parameters.AddRange(
new[]
{
new SqlParameter("@fileName",file),
});
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
FileStream fs = new FileStream(destfile, FileMode.Append, FileAccess.Write);
while (reader.Read())
{
byte[] buffer = (byte[])reader[0];
fs.Write(buffer, 0, buffer.Length);
}
fs.Close();
reader.Close();
conn.Close();
}
}
}
❷ Java中如何通过txt文件存储和取出数据
Java中读取txt文件可以使用file类先创建一个对象,然后使用I/O操作,进行读取或者写入操作,示例如下:x0dx0aimportjava.io.BufferedReader;x0dx0aimportjava.io.File;x0dx0aimportjava.io.FileInputStream;x0dx0aimportjava.io.FileNotFoundException;x0dx0aimportjava.io.FileOutputStream;x0dx0aimportjava.io.IOException;x0dx0aimportjava.io.InputStreamReader;x0dx0aimportjava.io.PrintWriter;x0dx0ax0dx0apublicclassdemo2{x0dx0aprivatestaticStringpath="f:/demo1.txt";x0dx0aprivatestaticFilefile;x0dx0astatic{x0dx0afile=newFile(path);x0dx0aif(!file.exists()){x0dx0atry{x0dx0afile.createNewFile();x0dx0a}catch(IOExceptione){x0dx0ae.printStackTrace();x0dx0a}x0dx0a}x0dx0a}(String[]args)throwsIOException{x0dx0aStudentstu=newStudent(1,"张三",90);x0dx0awriteDataToFile(file,stu);x0dx0areadDataFromFile(file);x0dx0a}x0dx0ax0d(Filefile)throwsIOException{x0dx0aBufferedReaderreader=newBufferedReader(newInputStreamReader(newFileInputStream(file)));x0dx0aStringstr="";x0dx0awhile((str=reader.readLine())!=null){x0dx0aString[]stuInfo=str.split(",");x0dx0aSystem.out.println("学号:"+stuInfo[0]+"姓名:"+stuInfo[1]+"score:"+stuInfo[2]);x0dx0a}x0dx0a}x0dx0ax0d(Filefile,Studentstu)throwsFileNotFoundException{x0dx0aPrintWriterout=newPrintWriter(newFileOutputStream(file,true));x0dx0aout.println(stu.toString());x0dx0aout.close();x0dx0a}x0dx0a}
❸ java如何从数据库读取数据并写入txt文件
写Java程序时经常碰到要读如txt或写入txt文件的情况,但是由于要定义好多变量,经常记不住,每次都要查,特此整理一下,简单易用,方便好懂!
[java]viewplain
packagee.thu.keyword.test;
importjava.io.File;
importjava.io.InputStreamReader;
importjava.io.BufferedReader;
importjava.io.BufferedWriter;
importjava.io.FileInputStream;
importjava.io.FileWriter;
publicclasscin_txt{
staticvoidmain(Stringargs[]){
try{//防止文件建立或读取失败,用catch捕捉错误并打印,也可以throw
/*读入TXT文件*/
Stringpathname="D:\twitter\13_9_6\dataset\en\input.txt";//绝对路径或相对路径都可以,这里是绝对路径,写入文件时演示相对路径
Filefilename=newFile(pathname);//要读取以上路径的input。txt文件
InputStreamReaderreader=newInputStreamReader(
newFileInputStream(filename));//建立一个输入流对象reader
BufferedReaderbr=newBufferedReader(reader);//建立一个对象,它把文件内容转成计算机能读懂的语言
Stringline="";
line=br.readLine();
while(line!=null){
line=br.readLine();//一次读入一行数据
}
/*写入Txt文件*/
Filewritename=newFile(".\result\en\output.txt");//相对路径,如果没有则要建立一个新的output。txt文件
writename.createNewFile();//创建新文件
BufferedWriterout=newBufferedWriter(newFileWriter(writename));
out.write("我会写入文件啦 ");// 即为换行
out.flush();//把缓存区内容压入文件
out.close();//最后记得关闭文件
}catch(Exceptione){
e.printStackTrace();
}
}
}
❹ Java怎么使用表格输入数据并保存为文件
在 Java 中使用表格输入数据并保存为文件,可以使用 Swing 包中的 JTable 组件和 I/O 类库中的文件操作方法。
首先,你需要创建一个 JTable 对象,并在表格中输入数据。例如:
String[] columnNames = {"Name", "Age", "Gender"};Object[][] data = {{"Alice", 20, "Female"}, {"Bob", 25, "Male"}};JTable table = new JTable(data, columnNames);
然后,你需要使用 I/O 类库中的文件操作方法,将表格中的数据保存到文件中。例如,你可以使用 FileWriter 类来写入文件:
FileWriter writer = new FileWriter("table.txt");for (int i = 0; i < table.getRowCount(); i++) { for (int j = 0; j < table.getColumnCount(); j++) {
writer.write(table.getValueAt(i, j).toString());
writer.write("\t");
}
writer.write("\n");
}
writer.close();
上面的代码会将表格中的数据写入文件 "table.txt" 中,每行数据之间用制表符隔开,每列数据之间用换行符隔开。
注意,在使用文件操作方法时,你需要处理文件读写可能出现的异常。你可以使用 try-catch 语句将文件操作代码包装起来,以便在发生异常时能够正确处理。
这是一个简单的例子,你可以根据自己的需求来调整代码。例如,你可以使用其他的 I/O 类,比如 BufferedWriter 或 PrintWriter 等,来更方便地写入文件。你还可以使用其他的文件格式,比如 CSV、Excel 等,来保存数据。