RFR: 8288882: JFileChooser - empty (0 bytes) file is displayed as 1 KB [v26]

Alexey Ivanov aivanov at openjdk.org
Mon Sep 12 11:05:15 UTC 2022


On Fri, 9 Sep 2022 08:11:56 GMT, Abhishek Kumar <duke at openjdk.org> wrote:

>> src/java.desktop/share/classes/sun/swing/FilePane.java line 1277:
>> 
>>> 1275:             DecimalFormat df = new DecimalFormat("0.0");
>>> 1276:             double val = fileSize/baseFileSize;
>>> 1277:             return  Double.valueOf(df.format(val));
>> 
>> The new code to round up looks difficult to understand (I mean the addition of 99 and re-worked if-conditions). I liked the previous version better. The only thing required to introduce rounding up is updating `roundToOneDecimalPlace`:
>> 
>> 
>>         private static double roundToOneDecimalPlace(long fileSize) {
>>             return  Math.ceilDiv(fileSize, 100L) / 10.0d;
>>         }
>> 
>> 
>> [`Math.ceilDiv`](https://docs.oracle.com/en/java/javase/18/docs/api/java.base/java/lang/Math.html#ceilDiv(long,long)) is available since Java 18.
>> 
>> However, this code also works and is better suited for backporting:
>> 
>> 
>>         private static double roundToOneDecimalPlace(long fileSize) {
>>             return  Math.ceil(fileSize / 100.0d) / 10.0d;
>>         }
>> 
>> Note that the first division is also floating point.
>> 
>> With this implementation of `roundToOneDecimalPlace` and your code before the latest update which introduced `+99`, I get the expected size displayed in `JFileChooser`, that is rounded up if there's a non-zero remainder. Could you please verify that?
>
> I have checked with the suggested changes, it rounds up the value if the remainder is non-zero value.
> But for files >1000 bytes it doesn't return the file size similar to native file manager. 
> 
> FileChooser rounded up the values to next decimal precision.
> ![FC_FileSize_1](https://user-images.githubusercontent.com/107542245/189302260-f99d175a-133b-45ad-bdf0-52de06aacb7d.png)
> 
> File sizes are not rounding up in all cases in native file system. For e.g. 1150 bytes file size is is 1.1 KB whereas 1151 bytes file size is 1.2 KB.   
> ![Native_FIleSize](https://user-images.githubusercontent.com/107542245/189302284-55e48e72-c9c0-4abe-aa17-56190f2aeaee.png)
> 
> To keep it consistent with the native file system for larger files (>1000 bytes), I tried using DecimalFormat.

To clarify: Abhishek and I were discussing the approach, it's still *inconsistent* in the same way: the file size was rounded up if it's less than 1 KB, but rounded (down) if it's larger.

The native file manager in Ubuntu rounds the file size.

`JFileChooser` does not display bytes that's why we round up the size. To avoid confusion, the size displayed in `JFileChooser` is always rounded up as Phil @prrace suggested.

-------------

PR: https://git.openjdk.org/jdk/pull/9327



More information about the client-libs-dev mailing list