当前位置: 首页 > 知识库问答 >
问题:

在spring-batch中使用FlatFileItemWriter创建新的输出文件

尹冠宇
2023-03-14

我有一个简单的spring批处理作业-逐行读取一个文件,对输入字符串做一些事情,并编写一些输出。输出文件包含每一行输入以及该行的某些处理状态(成功/失败。)从以下文件读取文件:

/ / 并将处理后的输出写入 / / 所有这些值都作为 jobparameters
文件读取器如下所示:

<bean id="itemReader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step">
        <property name="resource" value="file:#{jobParameters['cwd']}/#{jobParameters['inputFolder']}/#{jobParameters['inputFile']}" />

        <property name="lineMapper">
          <bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">

            <property name="lineTokenizer">
              <bean class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
                <property name="delimiter" value="," />
              </bean>
            </property>
            <property name="fieldSetMapper" >
              <bean class="org.springframework.batch.item.file.mapping.PassThroughFieldSetMapper" />
            </property>
          </bean>
        </property>
    </bean>

项目编写器如下所示:

<bean id="itemWriter" class="org.springframework.batch.item.file.FlatFileItemWriter" scope="step" >
        <property name="resource" value="#{jobParameters['cwd']}/#{jobParameters['outputFolder']}/#{jobParameters['inputFile']}" />
        <property name="lineAggregator">
            <bean class="org.springframework.batch.item.file.transform.PassThroughLineAggregator" />
        </property>
    </bean>  
2014/06/27 18-02-31,168:OUT:ERROR[Encountered an error executing the step]
org.springframework.batch.item.ItemStreamException: Could not convert resource to file: [class path resource [S:/temp/seller-optin-batch/output/sellersToOptin_test.txt]]
    at org.springframework.batch.item.file.FlatFileItemWriter.getOutputState(FlatFileItemWriter.java:374)
    at org.springframework.batch.item.file.FlatFileItemWriter.open(FlatFileItemWriter.java:314)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
...
    Caused by: java.io.FileNotFoundException: class path resource [S:/temp/seller-optin-batch/output/sellersToOptin_test.txt] cannot be resolved to URL because it does not exist
        at org.springframework.core.io.ClassPathResource.getURL(ClassPathResource.java:179)
        at org.springframework.core.io.AbstractFileResolvingResource.getFile(AbstractFileResolvingResource.java:48)
        at org.springframework.batch.item.file.FlatFileItemWriter.getOutputState(FlatFileItemWriter.java:371)
        ... 58 more
    2014/06/27 18-02-31,168:ERR:ERROR[Encountered an error executing the step]

    [org.springframework.batch.item.file.FlatFileItemWriter.getOutputState threw org.springframework.batch.item.ItemStreamException: Could not convert resource to file: [class path resource [S:/temp/seller-optin-batch/output/sellersToOptin_test.txt]]]
    Batch Execution Failed!

共有1个答案

荆梓
2023-03-14

添加'file://'前缀解决了我的问题。谢谢@lucabassoricci。

 类似资料:
  • 我需要生成具有以下要求的CSV文件: 每个字段都被引号包围 分隔符(管道字符)用反斜杠转义 反斜杠用反斜杠转义 输入: 字段1 Field2 with\反斜杠"DoubleQuotes"And|管道 字段3 预期产出: 有可能获得这样的输出吗?

  • 我尝试了本文中应用的解决方案:Spring Batch——每次都创建一个新文件,而不是覆盖它,以便将数据从CSV传输到XML,但对于我使用的基于注释的方法,它不起作用。 我的批处理作业计划每1小时运行一次,此批处理作业读取表格并将数据写入CSV文件。当数据写入时,我需要创建一个新文件。。如果文件名是唯一的,那就好了,所以我希望按照帖子实现日期等。 有人能告诉我怎么回事吗?

  • 我写了一个Spring批处理作业,它从数据库读取,然后写入csv。 这项工作非常简单,但是ItemWriter看起来执行了两次。i、 e.我最终得到了两个CSV(完全相同),而不是一个。 有人能帮我弄清楚为什么吗?它是通过不同的作业执行来实现的。身份证件 正在连接下面运行的批处理作业和控制台输出。。。 和控制台输出... 这会产生两个CSV,每个CSV都有不同的作业执行。已附加到文件名的id。大师

  • 我跟踪了许多链接,如Spring Batch Framework-auto create Batch Table和https://docs.Spring.io/spring-boot/docs/2.0.0.m7/reference/htmlsingle/#howto-initialize-a-spring-batch-database,但这并不能满足我的要求 在Spring Boot2.0中,我们

  • 阅读器bean 我尝试这样做:在FlatFileItemReader的实现中,将输入文件路径作为string属性添加到ExecutionContext的映射中。在我的FlatFileItemWriter实现中-重写setResource,并实际从ExecutionContext的值中创建一个Resource对象。这样行吗?

  • 问题内容: 此功能无效,并引发错误。我是否需要更改任何参数或参数? 问题答案: 如果文件不存在,将失败。 您可以使用,如果该文件不存在,则会创建该文件,但是它将截断现有文件。 另外,您可以使用; 如果该文件不存在,则会创建该文件,但不会截断现有文件。