下面列舉出4種方式:
1、使用FileStreams復制
這是最經典的方式將一個文版件的內容復制到另一個文件中。 使用權FileInputStream讀取文件A的位元組,使用FileOutputStream寫入到文件B。正如你所看到的我們執行幾個讀和寫操作try的數據,所以這應該是一個低效率的,下一個方法我們將看到新的方式。 這是第一個方法的代碼:
② java文件如何讀取
有幾種方法讀取吧
File file = new File("d:\\a.txt");//把D盤目錄下的a.txt讀取出來,
InputStream is = new FileInputStream(file);//把文件以位元組流讀回到內存中
第二種是類加答載
Demo1.class.getClassLoader().getResourceAsStream("a.txt");//Demo1為當前類名,a.txt在與Demo1.class在同一目錄下。
還有其它的就不說了
③ Java File和FileStream類區別在什麼地方
FileStream可以比喻成在水管中流動的水,那麼水管中流動的水從哪裡來,流到哪裡去,這個哪裡來,哪裡去就可以比喻為File。
整句話有代碼可以表示為:
FileStream fs = new FileStream(new File(filename));
這是兩者的關系了。當然File、FileStream還各自有方法、屬性,這是兩者的不同之處。
④ 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();
}
}
}
⑤ c#filestream 與java哪個api相同
C#當中的API是: FileStream fs = new FileStream(Filepath, FileMode.Open);
Java當中的API是:File file = new File(path);
⑥ java 讀取伺服器上的文件
File file = new File(ServletActionContext.getServletContext().getRealPath(「/」),"test.txt");
"/"是web項目的根目錄,然後就和讀本地文件的一樣