Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将列表转换为InputStream而不创建中间文件_Java_List_Inputstream - Fatal编程技术网

Java 将列表转换为InputStream而不创建中间文件

Java 将列表转换为InputStream而不创建中间文件,java,list,inputstream,Java,List,Inputstream,我正在使用一个函数,它将以列表和类名的形式获取输入,在这个函数中,我将列表转换为分隔符文件(中间),然后将文件转换为InputStream作为返回值 在这里,创建中间文件并删除是一个乏味的过程,因为这将增加时间和性能 还有另一种方法,我们可以直接将List中的数据转换为带有标题的分隔符(也许我们可以将其存储在List中),然后无需创建中间文件,我们就可以直接将其转换为InputStream <T> InputStream createInputStream(String csvFil

我正在使用一个函数,它将以列表和类名的形式获取输入,在这个函数中,我将列表转换为分隔符文件(中间),然后将文件转换为InputStream作为返回值

在这里,创建中间文件并删除是一个乏味的过程,因为这将增加时间和性能

还有另一种方法,我们可以直接将
List
中的数据转换为带有标题的分隔符(也许我们可以将其存储在
List
中),然后无需创建中间文件,我们就可以直接将其转换为InputStream

<T> InputStream createInputStream(String csvFileName, List<T> listObject, Class className, char csvPreference) {

        ICsvBeanWriter beanWriter = null;
        File file=new File(csvFileName);
        InputStream inputStream=null;
        try {
            CsvPreference DELIMITER = new CsvPreference.Builder('"', csvPreference, "\n").build();

            beanWriter = new CsvBeanWriter(new FileWriter(file), DELIMITER);
            List<String> fieldList = Arrays.stream(className.getDeclaredFields()).map(Field::getName).collect(Collectors.toList());
            CellProcessor[] processors = new CellProcessor[fieldList.size()];
            for (int i = 0; i < fieldList.size(); i++) {
                processors[i] = new Optional();
            }
            String[] header = new String[fieldList.size()];
            fieldList.toArray(header);
            beanWriter.writeHeader(header);

            for (T obj : listObject) {
                beanWriter.write(obj, header, processors);
            }

        } catch (IOException ex) {
            System.err.println("Error writing the CSV file: " + ex);
        } finally {
            if (beanWriter != null) {
                try {
                    beanWriter.close();
                    inputStream=new FileInputStream(file);
                    file.delete();
                } catch (IOException ex) {
                    System.err.println("Error closing the writer: " + ex);
                }
            }
        }
        return inputStream;
    }
在列表中添加元素

List<Users> userList=new ArrayList<Users>();
userList.add(new Users("1","AA","Male"));
userList.add(new Users("2","BB","Male"));
userList.add(new Users("3","CC","Female"));
这里的中间文件(demo.csv)如下所示:

id|name|gender
1|AA|Male
2|BB|Male
3|CC|Female
从这个文件中,我将转换为inputstream


提前谢谢,
杰伊

你考虑过类似的事情吗

ByteArrayOutputStream baos = new ByteArrayOutputStream();
beanWriter = new CsvBeanWriter(new PrintWriter(baos), DELIMITER);

//write some stuff

byte[] byteArray = baos.toByteArray();

return new ByteArrayInputStream(byteArray);

你考虑过类似的事情吗

ByteArrayOutputStream baos = new ByteArrayOutputStream();
beanWriter = new CsvBeanWriter(new PrintWriter(baos), DELIMITER);

//write some stuff

byte[] byteArray = baos.toByteArray();

return new ByteArrayInputStream(byteArray);

你不能创建一个扩展say
Reader
的类吗?你不能创建一个扩展say
Reader
的类吗?你能添加maven依赖项吗?你能添加maven依赖项吗
ByteArrayOutputStream baos = new ByteArrayOutputStream();
beanWriter = new CsvBeanWriter(new PrintWriter(baos), DELIMITER);

//write some stuff

byte[] byteArray = baos.toByteArray();

return new ByteArrayInputStream(byteArray);