java 字节流写入_从字节流中写入和读取

这篇博客探讨了如何在不使用临时文件的情况下,通过内存流处理CSV数据。作者试图创建一个CSV文件,从列表框中读取用户输入,直接写入流中,然后上传到服务器。过程中遇到了问题,因为`myCsvFileStream`未被正确初始化。解决方案是使用`MemoryStream`代替`FileStream`,以避免临时文件的使用。最终,作者成功实现了将CSV数据作为字节数组发送到服务器的功能。
摘要由CSDN通过智能技术生成

我有一个页面,用户可以上传自己的csv或输入值到列表框,然后创建一个csv(在后台) . 无论csv创建的方式如何,我都需要通过字节流将csv上传到我们的服务器 .

我的问题是,当我创建csv我不应该创建一个临时文件,我应该能够写入流然后读回来上传 . 如何删除临时文件的需要?

有效的当前代码(但使用临时文件):

try {

string filename = DateTime.Now.ToString("MMddyyHmssf");

filename = filename + ".csv";

string directory = ConfigurationManager.AppSettings["TempDirectory"].ToString();

path = Path.Combine(directory, filename);

using (StreamWriter sw = File.CreateText(path)) {

foreach (ListItem item in this.lstAddEmailAddress.Items) {

sw.WriteLine(" , ," + item.ToString());

}

}

} catch (Exception ex) {

string error = "Cannot create temp csv file used for importing users by email address. Filepath: " + path + ". FileException: " + ex.ToString();

this.writeToLogs(error, 1338);

}

}

// put here for testing the byte array being sent vs ready byte[] byteArray = System.IO.File.ReadAllBytes(path);

myCsvFileStream = File.OpenRead(path);

nFileLen = (int)myCsvFileStream.Length;

我试过了

Stream myCsvFileStream;

using (StreamWriter sw = new StreamWriter(myCsvFileStream)) {

foreach (ListItem item in this.lstAddEmailAddress.Items) {

sw.WriteLine(" , ," + item.ToString());

}

}

但是,由于myCsvFileStream未初始化(因为stream是静态类),因此它始终为null .

以下是我在创建csv后对数据(字节流)所做的操作 .

byte[] file = new byte[nFileLen];

myCsvFileStream.Read(file, 0, nFileLen);

bool response = this.repositoryService.SaveUsers(this.SelectedAccount.Id, file, this.authenticatedUser.SessionToken.SessionId);

myCsvFileStream.Close();

最后我使用 StringBuilder 来创建我的csv文件内容 . 然后获得了其内容的字节数组并用它来填充我的共享流(我说共享是因为当用户输入他们自己的CSV文件时它是 HttpPostedFile 但是当通过其余调用将其发送到我们的服务器时( respositoryservices.saveusers )它使用了与通过此方法相同的字节流)

StringBuilder csvFileString = new StringBuilder();

sharedStreamForBatchImport = new MemoryStream();

foreach (ListItem item in this.lstAddEmailAddress.Items) {

csvFileString.Append(",," + item.ToString() + "\\r\\n");

}

//get byte array of the string

byteArrayToBeSent = Encoding.ASCII.GetBytes(csvFileString.ToString());

//set length for read

byteArraySize = (int)csvFileString.Length;

//read bytes into the sharedStreamForBatchImport (byte array)

sharedStreamForBatchImport.Read(byteArrayToBeSent, 0, byteArraySize);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值