General Techniques for Cross-Platform File Access Code

File manipulation vies with AWT for being the part of Java where it’s hardest to write truly cross-platform, robust code. Until Java 2, Sun really didn’t pay a lot of attention to differences between filesystems on different platforms. The situation is getting better, however. The java.io.File class does work much more reliably across Windows and Unix in Java 2 and has hooks to allow it to work more naturally on other platforms as well. Of course, Java 1.1 is still the primary delivery platform for most Java applications that work with files. To help you achieve greater serenity and overall cross-platform nirvana, I’ve summarized some basic rules from this chapter to help you write file manipulation code that’s robust across a multitude of platforms:

  • Never, never, never hardcode pathnames in your application.

  • Ask the user to name your files. If you must provide a name for a file, try to make it fit in an 8.3 DOS filename with only pure ASCII characters.

  • Do not assume the file separator is “/” (or anything else). Use File.separatorChar instead.

  • Do not parse pathnames to find directories. Use the methods of the java.io.File class instead.

  • Do not use renameTo() for anything except renaming a file. In particular, do not use it to move a file.

  • Try to avoid moving and copying files from within Java programs if at all possible.

  • Do not use . to refer to the current directory. Use System.getProperty ("user.dir") instead.

  • Do not use .. to refer to the parent directory. Use getParent() instead.

  • Do not assume the current working directory is the one where your .class files live. It almost certainly won’t be that directory on the Mac, and it may not be on other platforms, including Windows and Unix.

  • Place any data files your program requires in JAR archives rather than directly in the filesystem, then load them as resources from the class path.

  • When in doubt, it never hurts to convert filenames to canonical form.

  • Do not assume anything about filesystem conventions. Some platform somewhere will surprise you. (Have you tested your program on BeOS yet?)

  • Test your code on as many different filesystems as you can get your hands on.

Despite all the problems I’ve pointed out, it is mostly possible to write robust file access code that works across all platforms where Java runs. But doing so requires understanding, effort, and thought. You cannot simply write for Windows or Unix and hope things will work out for the best on other platforms. You must plan to handle a wide range of filesystems and filename conventions.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.142.136.159