java数据写入文件方案,接收到数据之后写入文件如何实现

我的程序是接收到数据之后写入文件,数据都接收到了,但是为什么没有写入到文件(图片)呢?这是我的代码

System.out.println("run");

String path2 = android.os.Environment.getExternalStorageDirectory()

.toString()

+ "/EasyCoder" + "/" + name + ".png";

File file=new File(path2);

try {

file.createNewFile();

} catch (IOException e1) {

e1.printStackTrace();

}

int length2 = 0;

byte[] buf2 = new byte[1024];

try {

DataOutputStream fileOut = new DataOutputStream(

new BufferedOutputStream(new FileOutputStream(path2)));

while (true) {

int read = 0;

if (in != null) {

read = in.read(buf2);

}

System.out.println(read);

if (read == -1) {

break;

}

fileOut.write(buf2, 0, read);

}

fileOut.flush();

fileOut.close();

in.close();

} catch (Exception e) {

e.printStackTrace();

}

我不是太清楚为什么你要用DataOutputStream来做,而且in这个变量也不知道如何获取到的

在我这里用这个DataOutputStream还是可以实现复制图片的,我想如果你那里有问题,可能在in这个变量上面

我的代码如下

Java code

import java.io.*;

public class DataOutputStreamTest {

public static void main(String[] args){

System.out.println("run");

String path1 = "resources/images/thu3.jpg";

String path2 = "resources/images/thu5.jpg";

File file=new File(path2);

try {

file.createNewFile();

} catch (IOException e1) {

e1.printStackTrace();

}

int length2 = 0;

byte[] buf2 = new byte[1024];

try {

DataOutputStream fileOut = new DataOutputStream(

new BufferedOutputStream(new FileOutputStream(path2)));

DataInputStream in = new DataInputStream(

new BufferedInputStream(new FileInputStream(path1)));

while (true) {

int read = 0;

if (in != null) {

read = in.read(buf2);

}

System.out.println(read);

if (read == -1) {

break;

}

fileOut.write(buf2, 0, read);

}

fileOut.flush();

fileOut.close();

in.close();

} catch (Exception e) {

e.printStackTrace();

}    }}DataOutputStream 用OutputStream 不就行了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用函数式编程中的Stream API来实现按批次接收数据写入CSV文件。 首先,你需要一个函数来接收数据,并将其分成批次。假设你从某个数据源中获取数据,每个数据项都是一个字符串,你希望将它们分成大小为batchSize的批次: ```java public static List<List<String>> batchData(Stream<String> data, int batchSize) { return data.collect(Collectors.groupingBy(s -> (int) Math.floor(count.getAndIncrement() / batchSize))) .entrySet().stream().sorted(Map.Entry.comparingByKey()) .map(Map.Entry::getValue).collect(Collectors.toList()); } ``` 这个函数使用了Stream API的`collect()`方法,将数据按批次分组。其中,`count`是一个`AtomicLong`类型的计数器,用于计算数据项的数量。 接下来,你需要一个函数来将批次数据写入CSV文件。你可以使用第三方库OpenCSV来实现CSV文件的读写。假设你已经在项目中导入了OpenCSV的依赖,你可以写出如下的函数: ```java public static void writeBatchToCsv(List<List<String>> batchData, String filePath) throws IOException { CSVWriter writer = new CSVWriter(new FileWriter(filePath)); batchData.forEach(batch -> { String[] data = batch.toArray(new String[0]); writer.writeNext(data); }); writer.close(); } ``` 这个函数使用了Stream API的`forEach()`方法,将每个批次数据写入CSV文件。其中,`CSVWriter`是OpenCSV库中的类,用于将数据写入CSV文件。这个类的构造函数接收一个`FileWriter`类型的参数,用于指定要写入文件路径。 最后,你可以将这两个函数组合起来,实现按批次接收数据写入CSV文件的功能: ```java public static void receiveAndWriteToCsv(Stream<String> data, int batchSize, String filePath) throws IOException { batchData(data, batchSize).forEach(batch -> { try { writeBatchToCsv(batch, filePath); } catch (IOException e) { e.printStackTrace(); } }); } ``` 这个函数首先调用`batchData()`函数,将数据分成批次。然后,使用`forEach()`方法遍历每个批次,调用`writeBatchToCsv()`函数将批次数据写入CSV文件。 ### 回答2: Java函数式编程可以通过使用Stream和Lambda表达式来实现按批次接收数据并通过CsvWriter写入文件。 首先,我们可以使用Stream的`of`方法将数据分成批次。假设我们的数据是一个名为`dataList`的List对象,将其分成每批次大小为50的子集可以使用以下代码: ```java int batchSize = 50; List<List<Data>> batches = IntStream.range(0, dataList.size()) .boxed() .collect(Collectors.groupingBy(index -> index / batchSize)) .values() .stream() .map(indices -> indices.stream() .map(dataList::get) .collect(Collectors.toList())) .collect(Collectors.toList()); ``` 上面的代码中,我们首先使用`IntStream.range`生成一个从0到数据列表大小的整数流,然后使用`boxed`方法将其转换为`Stream<Integer>`。接着,我们使用`Collectors.groupingBy`将整数流按照批次大小进行分组,然后使用`values`方法获取分组后的值。 接下来,我们对每个批次应用Lambda表达式来写入文件。假设我们已经创建了一个名为`csvWriter`的CsvWriter对象,可以使用以下代码将每个批次写入文件: ```java batches.forEach(batch -> batch.forEach(data -> { csvWriter.writeRow(data); csvWriter.flush(); })); ``` 上述代码使用`forEach`方法遍历每个批次,然后使用嵌套的`forEach`方法遍历每条数据,并通过`writeRow`方法将数据写入文件。最后,我们使用`flush`方法将缓冲区的数据立即写入文件。 综上所述,我们可以使用Java函数式编程的Stream和Lambda表达式来实现按批次接收数据并通过CsvWriter写入文件。通过将数据分成批次,然后使用Lambda表达式逐个写入文件,我们可以有效地处理大量数据,并实现代码的可维护性和可读性。 ### 回答3: Java函数式编程使得按批次接收数据并通过csvwriter写入文件变得更加简洁和高效。下面是一个实现的示例代码: import java.io.FileWriter; import java.io.IOException; import java.io.Writer; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class BatchDataProcessing { public static void main(String[] args) { List<String> data = Arrays.asList("1,John,Smith", "2,Jane,Doe", "3,Michael,Johnson", "4,Emily,Williams", "5,David,Miller"); // 批次大小 int batchSize = 2; try { Writer fileWriter = new FileWriter("data.csv"); CsvWriter csvWriter = new CsvWriter(fileWriter); // 将数据分批处理 List<List<String>> batches = partitionData(data, batchSize); // 在CSV文件写入数据 for (List<String> batch : batches) { for (String record : batch) { csvWriter.writeRecord(record.split(",")); } } // 关闭CSV writer和文件 writer csvWriter.close(); fileWriter.close(); } catch (IOException e) { e.printStackTrace(); } } private static List<List<String>> partitionData(List<String> data, int batchSize) { return data.stream() .collect(Collectors.groupingBy(i -> (data.indexOf(i) / batchSize))) .values() .stream() .collect(Collectors.toList()); } } 在这个例子中,我们首先初始化了一个包含记录的数据列表。然后设置了每个批次的大小,这里设为2。在try-catch代码块中,首先创建了一个Writer对象来写入CSV文件,然后创建了一个CsvWriter对象来管理写入csv文件的操作。接下来,我们使用partitionData方法将数据分成多个批次。然后,我们遍历每个批次,并使用csvWriter将每个记录写入CSV文件。最后,我们关闭了csvWriter和fileWriter。 partitionData方法使用Java 8的stream操作,将数据分成多个批次。它使用了collect(Collectors.groupingBy())方法将数据按照每个批次的索引进行分组,然后再使用collect(Collectors.toList())方法将分组结果转为一个列表。这样就得到了包含多个批次的列表。 这个例子展示了如何使用Java函数式编程实现按批次接收数据并通过csvwriter写入文件。通过使用流操作和lambda表达式,我们可以更简洁地处理数据,并有效地将数据分批处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值