簡體   English   中英

將 FileOutputStream 與 CSVWriter 一起使用的聲納主要警報

[英]Sonar major alert for using FileOutputStream with CSVWriter

在 spring 啟動應用程序(Java 1.8)中,我們使用 CSWriter 在 CSV 文件上寫入一些數據。

我們還使用 Sonar 來控制代碼異味和覆蓋率。

我遇到了來自 Sonar 的有關此代碼的主要警報之一的問題:

CSVWriter writer = new CSVWriter(new OutputStreamWriter(
                new FileOutputStream(directory + File.separator + csv, true), StandardCharsets.UTF_8))

聲納告訴我使用新方法從 Java 1.7 創建 stream:

This method creates and uses a java.io.FileInputStream or java.io.FileOutputStream object. 不幸的是,這兩個類都實現了一個 finalize 方法,這意味着創建的對象可能會一直掛起,直到發生完整的垃圾回收,這將使過多的垃圾在堆上停留的時間更長,甚至可能比預期的長得多。 Java 7 引入了兩種方法來創建用於讀取和寫入文件的流,而無需擔心。 您應該考慮從上述這些類切換到 InputStream is = java.nio.file.Files.newInputStream(myfile.toPath()); OutputStream os = java.nio.file.Files.newOutputStream(myfile.toPath());

我不知道如何處理這個錯誤,因為 OutputStreamWriter 正在等待一個 OutputStream。 你們中有人有同樣的問題嗎? 我應該選擇其他 CSV 管理器嗎?

如果你只是想擺脫 FileOutputStream 你可以使用類似的東西:

File file = new File("pathName");
OutputStream os = java.nio.file.Files.newOutputStream(file.toPath());
final CSVWriter csvWriter = new CSVWriter(new OutputStreamWriter(os, StandardCharsets.UTF_8));

我沒有配置聲納,所以不確定現在是否可以。

另一方面,您可以在 try 子句之后使用 try-with-resources 關閉 stream 。

直接使用 FileWriter:

CSVWriter writer = new CSVWriter(new FileWriter(path.toString()));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM