java程序中怎样用文件存储数据-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

java程序中怎样用文件存储数据

2016-06-02 14:20:25 3228 2

数据结构的课设 让写一个宿舍管理系统,用java写怎么才能不用数据库存储数据,而用文件?

取消 提交回答
全部回答(2)
  • ziling.lxy
    2019-07-17 19:24:49

    建议楼主系统学习些Java IO的相关知识,就知道如何完成作业了。

    0 0
  • 蛮大人123
    2019-07-17 19:24:49

    对于一些小文件,我们可以一次性读取它的所有字节,然后一次提交到数据库

    ///
    /// 这个方法演示了如何一次提交所有的字节。这样导致的结果是:应用程序立即需要申请等同于文件大小的内存

    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();
       }
    }
    }
    0 0
添加回答
相关问答

0

回答

为什么在Java程序性能优化中,将常量声明为static final,并以大写命名?

2021-11-06 20:40:37 342浏览量 回答数 0

0

回答

为什么在Java程序性能优化中,在java中if (i == 1)和if (1 == i)是没有区别

2021-11-06 21:07:49 309浏览量 回答数 0

0

回答

为什么在Java程序性能优化中,使用数据库连接池和线程池?

2021-11-06 20:41:56 377浏览量 回答数 0

0

回答

为什么在Java程序性能优化中,不要导入一些不使用的类?

2021-11-06 20:41:52 301浏览量 回答数 0

0

回答

为什么在Java程序性能优化中,不要创建一些不使用的对象?

2021-11-06 20:40:54 333浏览量 回答数 0

0

回答

为什么在Java程序性能优化中,不要对超出范围的基本数据类型做向下强制转型?

2021-11-06 20:46:20 306浏览量 回答数 0

0

回答

为什么在Java程序性能优化中,数据+””最慢?

2021-11-06 20:47:02 241浏览量 回答数 0

0

回答

请问在Java程序性能优化中,如何将Servlet容器变成Undertow测试Undertow吞吐?

2021-11-06 20:55:18 419浏览量 回答数 0

0

回答

为什么在Java程序性能优化中,当复制大量数据时,使用System.arraycopy?

2021-11-06 20:35:27 287浏览量 回答数 0

1

回答

为什么在JAVA程序性能优化中尽量确定StringBuffer | StringBuilder的大小

2021-10-29 13:45:12 358浏览量 回答数 1
+关注
蛮大人123
我说我不帅他们就打我,还说我虚伪
文章
问答
问答排行榜
最热
最新
相关电子书
更多
Jpom一款低侵入式Java运维、监控软件
立即下载
阿里云MongoDB备份恢复功能说明和原理介绍
立即下载
快速变化背景下,组织如何保持过程的稳定性
立即下载