我正在尝试写入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文件为空。
答案 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);
}
}