写内容时,Csv文件为空

时间:2014-12-16 09:54:57

标签: java spring

我正在尝试写入csv文件。执行代码后,csv文件仍为空。 文件位于文件夹.../webapp/resources/

这是我的道教课程:

public class UserDaoImpl implements UserDao {

private Resource cvsFile;

public void setCvsFile(Resource cvsFile) {
    this.cvsFile = cvsFile;
}

@Override
public void createUser(User user) {

    String userPropertiesAsString = user.getId() + "," + user.getName()
            + "," + user.getSurname() +"\n";;

    System.out.println(cvsFile.getFilename());

    FileWriter outputStream = null;
    try {
        outputStream = new FileWriter(cvsFile.getFile());
        outputStream.append(userPropertiesAsString);
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            outputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

@Override
public List<User> getAll() {
    return null;
}
}

这是beans.xml的一部分。

<bean id="userDao" class="pl.project.dao.UserDaoImpl"
    p:cvsFile="/resources/users.cvs"/>

程序编译并且不会抛出任何异常,但CSV文件为空。

4 个答案:

答案 0 :(得分:2)

如果您在IDE中运行应用,则用于运行应用的/webapp/resources将与IDE中的/webapp/resources不同。尝试记录文件的完整路径并检查那里。

答案 1 :(得分:1)

我认为你正在查看错误的文件。如果指定绝对路径/resources/users.cvs,则可能不会将其写入相对于webapp的文件夹中。相反,它将写入/resources/users.cvs

因此,第一步是始终记录绝对路径,以确保文件位于您期望的位置。

答案 2 :(得分:0)

尝试使用outputStream.flush()作为try块中第一个的最终语句。

答案 3 :(得分:0)

尝试使用此代码,它至少会告诉您问题所在(Java 7 +):

// Why doesn't this method throw an IOException?
@Override
public void createUser(final User user)
{
    final String s = String.format("%s,%s,%s",
        Objects.requireNonNull(user).getId(),
        user.getName(), user.getSurname()
    );

    // Note: supposes that .getFile() returns a File object
    final Path path = csvFile.getFile().toPath().toAbsolutePath();

    final Path csv;

    // Note: this supposes that the CSV is supposed to exist!
    try {
        csv = path.toRealPath();
    } catch (IOException e) {
        throw new RuntimeException("cannot locate CSV " + path, e);
    }

    try (
        // Note: default is to TRUNCATE the destination.
        // If you want to append, add StandardOpenOption.APPEND.
        // See javadoc for more details.
        final BufferedWriter writer = Files.newBufferedWriter(csv,
            StandardCharsets.UTF_8);
    ) {
        writer.write(s);
        writer.newLine();
        writer.flush();
    } catch (IOException e) {
        throw new RuntimeException("write failure", e);
    }
}