как избежать сонара "Ресурсы должны быть закрыты" предупреждение о блокировке - PullRequest
0 голосов
/ 19 сентября 2019

Я не хочу закрывать RandomAccessFile немедленно, но он предупредит «Ресурсы должны быть закрыты» при сканировании сонара.Как этого избежать?Пример кода, подобный следующему:

public class AccessFileTest {
    private static RandomAccessFile accessFile;
    private static FileChannel fileChannel;
    private static long maxFileLength = 1024 * 1024;
    private static long currentFileLenth = 0;

    public static void main(String[] args) {
        for (int i = 0; i < 1000; i++) {
            write("test");
        }
    }

    private static void write(String text) {
        try {
            if (accessFile == null) {
                accessFile = new RandomAccessFile("", "rw");
                fileChannel = accessFile.getChannel();
            }
            ByteBuffer buffer = ByteBuffer.wrap(text.getBytes());
            fileChannel.write(buffer);
            closeAccessFileIfNeed(text.getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static void closeAccessFileIfNeed(byte[] bytes) throws IOException {
        currentFileLenth += bytes.length;
        if (currentFileLenth >= maxFileLength) {
            accessFile.close();
        }
    }
}

1 Ответ

0 голосов
/ 19 сентября 2019

можете ли вы попробовать эту операцию при попытке с ресурсом

Здесь

при использовании попытки с ресурсом, jVM автоматически вызывает close (), вручнуювам не нужно ничего делать

Без использования try с ресурсом Сонар говорит Resources should be closed, то есть вы должны закрыть его вручную, внутри блока finally

 try (RandomAccessFile accessFile = new RandomAccessFile("", "rw")) {

      FileChannel fileChannel = accessFile.getChannel();
    } catch (IOException e) {

    }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...