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

Andy Goryachev angorya at openjdk.org
Mon Aug 1 16:40:05 UTC 2022


On Mon, 1 Aug 2022 16:18:00 GMT, Andy Goryachev <angorya at openjdk.org> wrote:

>> As the returned value has been used in comparison with 1000.0 , so returning a double value from formatToDoubleValue().
>
> Perhaps we should mention in the comments that this code block is only relevant for ubuntu, and we'll be using base 1000 for the formatting.
> 
> The following test produces the same formatted values as ubuntu: 
> 
> 
> package goryachev.test;
> 
> import java.text.DecimalFormat;
> import java.text.MessageFormat;
> 
> public class TestFileChooser {
>     private boolean listViewWindowsStyle;
>     double baseFileSize = 1000.0;
>     String kiloByteString = "{0} KB";
>     String megaByteString = "{0} MB";
>     String gigaByteString = "{0} GB";
>     private static final long MEBI = 1_000_000L;
>     private static final long MEGA = 1024L * 1024L;
>     private static final long GIBI = 1_000_000_000L;
>     
>     public static void main(String[] args) {
>         t(0, "0 KB");
>         t(1, "1 KB");
>         t(999, "1 KB");
>         t(1000, "1 KB");
>         t(1001, "1 KB");
>         t(1023, "1 KB");
>         t(1024, "1 KB");
>         t(1025, "1 KB");
>         t(1026, "1 KB");
>         
>         t(1449, "1.4 KB");
>         t(1450, "1.4 KB");
>         t(1451, "1.5 KB");
>         t(1500-1, "1.5 KB");
>         t(1500, "1.5 KB");
>         t(1500+1, "1.5 KB");
>         
>         t(MEBI-1, "1 MB");
>         t(MEBI, "1 MB");
>         t(MEBI+1, "1 MB");
>         t(MEGA-1, "1 MB");
>         t(MEGA, "1 MB");
>         t(MEGA+1, "1 MB");
>         
>         t(GIBI-1, "1 GB");
>         t(GIBI, "1 GB");
>         t(GIBI+1, "1 GB");
>         
>         t(GIBI + 500_000_000L, "1.5 GB");
>         t(GIBI + 600_000_000L, "1.6 GB");
>         
>         System.err.println("OK");
>     }
>     
>     public static void t(long len, String expected) {
>         String res = new TestFileChooser().format(len);
>         if (!expected.equals(res)) {
>             System.err.println("expected=" + expected + " got=" + res + " for len=" + len);
>         }
>     }
>     
>     public String format(long len) {
>         String text;
>         if (listViewWindowsStyle) {
>             if (len == 0) {
>                 text = MessageFormat.format(kiloByteString, len);
>             } else {
>                 len /= 1000L;
>                 text = MessageFormat.format(kiloByteString, len + 1);
>             }
>         } else if (len < 1000L) {
>             text = MessageFormat.format(kiloByteString, (len==0 ? 0L : 1L));
>         } else {
>             double kbVal = formatToDoubleValue(len);
>             len = (long)kbVal;
>             if (kbVal < baseFileSize) {
>                 text = MessageFormat.format(kiloByteString, kbVal);
>             } else {
>                 double mbVal = formatToDoubleValue(len);
>                 len = (long)mbVal;
>                 if (mbVal < baseFileSize) {
>                     text = MessageFormat.format(megaByteString, mbVal);
>                 } else {
>                     double gbVal = formatToDoubleValue(len);
>                     text = MessageFormat.format(gigaByteString, gbVal);
>                 }
>             }
>         }
>         return text;
>     }
>     
>     public double formatToDoubleValue(long len) {
>         DecimalFormat df = new DecimalFormat("0.0");
>         double val = len/baseFileSize;
>         return  Double.valueOf(df.format(val));
>     }
> }

Looks like it matches on ubuntu.  

Do we care about other linuxes / desktop environments / file browsers?

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

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



More information about the client-libs-dev mailing list