Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsWhite Papers
Discussion GroupsFirst AidDatabasesJavaBeansGUIJava 3DVirtual MachineCORBASecurityToolsGeneral
Java DirectoryOpen Source ProjectsSample Book ChaptersUser GroupsWeb Resources
Related Topics
Databases.NETMore Topics ...

Java Forum / General / July 2006

Tip: Looking for answers? Try searching our database.

downloading then running a uncommon file type on a mac

Thread view: 
javajavalink - 11 Jul 2006 20:01 GMT
I need help with a program that will be run on mac OS X (with java
installed). The program has to download a file (not a common file type)
from a specific spot on aserver(running windows) to the desktop of the
mac. Then it has to open the file (as if you doulbe clicked it).

I am a relatively new to java. I know basic networking (i made a
chatroom program) and a bit about the regular stuff. I uses the sun
information (java.sun.com/j2se/1.5.0/docs/... alot so any refrences to
that would be helpful.

Here is what i don't know how to do (if it is possible in java):
-download a file from a server (is there a method for this that i can
use after i open the socket?)
-save this file to the desktop (this has to be done on a bunch of
different macs so i wont know their username or anything like that)
-launch the file (is there a program i can run on the file? like if is
was a MS word file, is there a program inside MS word that i could call
on the file?)

Thanks in advance!
Steve W. Jackson - 11 Jul 2006 22:34 GMT
> I need help with a program that will be run on mac OS X (with java
> installed). The program has to download a file (not a common file type)
[quoted text clipped - 16 lines]
>
> Thanks in advance!

When you say "with Java installed" in reference to Mac OS X, it's kind
of redundant.  Every copy of Mac OS X ever shipped has had Java
installed since its initial release in March 2001.  Which version is
available, however, is a different matter.  I don't know off the top if
10.3 systems have access to a Java 1.5 release or not.  And 10.4 systems
do not have it installed by default.  You might want to keep that in
mind.

I'll leave the networking for someone else to offer suggestions except
to say that it won't matter that the program is on a Mac.

As for the "desktop" question, that could depend on the language
setting.  Mac OS X is build on a foundation that derives from BSD, so
it's got a *nix-style filesystem.  Ordinarily, user home directories are
located in /Users, but you shouldn't rely on that.  And the user's
desktop is represented by a directory named "Desktop" on US English
systems, but it may be named something else entirely in other language
settings.  You'll find the Javadocs for Apple's extensions to Java at
<http://developer.apple.com/documentation/Java/Reference/1.5.0/appledoc/a
pi/index.html>.  Take a look at the com.apple.eio.FileManager class
there.  You probably need to use one of the static findFolder methods
there to do it safely.  The trouble is, I'm having trouble locating a
clear idea what values you would need for domain (where you would
indicate the "user domain") and folderType (where you would indicate the
"desktop folder").  I'm only now beginning to delve into Mac-specific
issues for my own purposes, and I haven't figured that part out yet.

As for launching the file, you could take a relatively simple approach
and do something based on the Runtime.exec method.  If you're familiar
with Windows, you know that you can use exec to "start" a file and let
Windows automatically hand it over to whatever app (if any) is
associated with its extension.  Mac OS X doesn't rely entirely on
extensions, but you can do a similar trick there using the "open"
command.  If you have access to a Mac OS X system, use its Terminal
application to get to a command line and try "man open" to read more.  
Basically, though, the command "open file" (where file could also be a
URL, even a file: type URL) will open the file or URL with whatever
program the user has set for it.  The man page will point out various
options for open.

= Steve =
Signature

Steve W. Jackson
Montgomery, Alabama

Timo Stamm - 11 Jul 2006 23:12 GMT
Steve W. Jackson schrieb:
> And the user's
> desktop is represented by a directory named "Desktop" on US English
> systems, but it may be named something else entirely in other language
> settings.

The directory is named "Desktop" in other language settings as well
(it's only translated in dialogs and the Finder).

There is one serious issue with filenames and non-ASCII characters. From
Wikipedia: "All UTF-8-MAC text is valid UTF-8 but precomposed characters
are forbidden and combining diacritics must be used to replace them. The
Mac OS X Operating System uses a special form of UTF-8 (sometimes
referred to as UTF-8-MAC) for writing file and folder names to the
filesystem."

Example: I created a file named "ä" in my Desktop directory. When I run
the following code

  for (String f : new File("/Users/ts/Desktop/").list()) {
    System.out.println(f);
  }

I get "a?" as the file name.

  new File("/Users/ts/Desktop/ä").exists()

however, returns true.

For this reason, I cannot commit files containing umlauts in their names
using the Eclipse CVS plugin.

That's truly "write once, debug everywhere".

Timo
javajavalink - 12 Jul 2006 02:46 GMT
Thanks very much.

Here is the code i have for connecting to the server using ftp:

import java.net.*;
import java.io.*;

public class URLtest
{
    public static void main(String[] args)
    {
        int i = 0;
        try
        {
            URL url = new URL("ftp://username:password@x.x.x.x/test.sql");
            System.out.println("1");
            URLConnection urlc = url.openConnection();

            FileOutputStream out = new FileOutputStream("E:\\file.sql");
            System.out.println("Opened output");

            BufferedReader in2 = new BufferedReader(new
InputStreamReader(urlc.getInputStream()));
            System.out.println("Opened input");

            while ((i = in2.read()) >= 0)
            {
                out.write(i);
            }
            out.close();
            in2.close();
            System.out.println("Done");
        }
        catch (IOException f)
        {
            System.err.println("ERROR");
            return;
        }
    }
}

It opens the URL fine but when it gets to "BufferedReader in2 =
new......", it throws and IOException.

Any ideas?
Steve W. Jackson - 12 Jul 2006 16:14 GMT
> Thanks very much.
>
[quoted text clipped - 41 lines]
>
> Any ideas?

I see some code very similar to this in Sun's networking tutorial at
<http://java.sun.com/docs/books/tutorial/networking/urls/index.html>.  
But the sample code deals only with reading via HTTP, or with reading
and writing via HTTP.  I'm not familiar enough with the details of an
FTP connection to know whether the above code should work properly.

Of course, there should be *some* kind of clue, I would think, in the
stack trace.  But you don't print it in the above code.  Perhaps if you
add "f.printStackTrace();" in your catch block and read what it produces
you'll get an idea exactly what the problem is.

I also hope you're not planning to run the above on a Mac, since it
might end up creating a file with a very strange name in the directory
where you're running -- remembering that Macs don't have "drive letters".

= Steve =
Signature

Steve W. Jackson
Montgomery, Alabama

javajavalink - 12 Jul 2006 18:36 GMT
import java.net.*;
import java.io.*;

public class URLtest
{
    public static void main(String[] args) throws IOException
    {
        int i = 0;
        try
        {
            URL url = new URL("ftp", "xx.xx.xx.xx", 20,
"username:password/test.sql");
            System.out.println("1");
            URLConnection urlc = url.openConnection();

            FileOutputStream out = new FileOutputStream("E:\\file.sql");
            System.out.println("Opened output");
            BufferedReader in = new BufferedReader(new
InputStreamReader(urlc.getInputStream()));
            System.out.println("Opened input");

            while ((i = in.read()) >= 0)
            {
                System.out.println("Got byte");
                out.write(i);
            }
            out.close();
            in.close();
            System.out.println("Done");
        }
        catch (Exception f)
        {
            f.printStackTrace();
            System.err.println("ERROR");
            return;
        }
    }
}

I should have mentioned that i am using MS visual J# .NET 2003 student
edition. So i ran it with the printStackTrace() and here is what i got
(i included a copy of the program above). Line 18 is this line:

BufferedReader in = new BufferedReader(new
InputStreamReader(urlc.getInputStream()));

1
Opened output
java.io.IOException:

  at com.ms.vjsharp.protocol.ftp.VJSFtpURLConnection.connect()
  at com.ms.vjsharp.protocol.ftp.VJSFtpURLConnection.getInputStream()
  at URLtest.main(String[] args) in C:\Documents and Settings\Brian\My
Document
s\Visual Studio Projects\FTPtest\URLtest.java:line 18
ERROR
Press any key to continue
Steve W. Jackson - 13 Jul 2006 15:50 GMT
> import java.net.*;
> import java.io.*;
[quoted text clipped - 53 lines]
> ERROR
> Press any key to continue

Your URL isn't valid, as far as I'm aware.  The fourth parameter is
intended to be the file portion, not a combination of user name,
password and file.  The user name and password portions make up what the
API refers to as "userinfo".  You'll need to get more familiar with how
the FTP protocol works.  You should be able to use the single-string
constructor.  In any event, you need to get familiar with the Javadoc
for the APIs.

The stack trace there, if I interpret it correctly, points back to the
getInputStream call made against that URLConnection.  As I say, it's not
correctly formed, so it's not going to work.
Signature

Steve W. Jackson
Montgomery, Alabama

Steve W. Jackson - 12 Jul 2006 16:02 GMT
> Steve W. Jackson schrieb:
> > And the user's desktop is represented by a directory named
[quoted text clipped - 30 lines]
>
> Timo

I'm not overly familiar with Wikipedia.  And when I looked up the
subject, I must say that I'm disappointed that they don't provide any
links supporting such a statement (they did provide such a link when
claiming that Java's DataInput uses a modified UTF-8).  Nonetheless,
searching for it via Google confirms the use of a modified form of UTF-8
in the HFS filesystem usually used with Mac OS X.

What I don't understand is why you would get something like that from
Java.  According to Sun's Javadocs, a Java String is UTF-16.  And from a
recent exchange on the Apple Java-Dev mailing list concerning the
subject of pre- and decomposed characters, it's my impression that you
should not have seen that output from a println call.  You may
understand it better than I should you care to visit the list archives
at <http://lists.apple.com/archives/Java-dev/2006>, where you'll find it
by the subject of "dnd of filenames with locale specific characters" in
the July messages.

I doubt that this would result in any troubles for transferring a file
from a Windows server to a Mac.  Accepting that the user's desktop is
truly named "Desktop" in all language settings, I'll revise my earlier
recommendation to the OP and suggest using the "user.home" system
property to get the user's home directory, making a File object around
that and getting a new File object from the child "Desktop" directory.  
Any file or directory created there would appear (in the Finder) on the
user's desktop.

= Steve =
Signature

Steve W. Jackson
Montgomery, Alabama

Timo Stamm - 14 Jul 2006 01:22 GMT
Steve W. Jackson schrieb:
> [...] From
>> Wikipedia: "All UTF-8-MAC text is valid UTF-8 but precomposed characters
[quoted text clipped - 7 lines]
> links supporting such a statement (they did provide such a link when
> claiming that Java's DataInput uses a modified UTF-8).

The fact is mentioned in various articles on apples developers sites,
but I haven't found a document that is dedicated to the issue. I guess
that makes it difficult to add a reference. And...

> Nonetheless,
> searching for it via Google confirms the use of a modified form of UTF-8
> in the HFS filesystem usually used with Mac OS X.

it's a Unicode standard (http://www.unicode.org/reports/tr15/), not a
proprietary modified form of UTF-8 like in Java.

> What I don't understand is why you would get something like that from
> Java.

I don't have the slightest idea. Fortunately it's not a showstopper for me.

> According to Sun's Javadocs, a Java String is UTF-16.  And from a
> recent exchange on the Apple Java-Dev mailing list concerning the
[quoted text clipped - 4 lines]
> by the subject of "dnd of filenames with locale specific characters" in
> the July messages.

Thanks for the link.

> I doubt that this would result in any troubles for transferring a file
> from a Windows server to a Mac.

I don't think so either. I was rather introducing my problem with
umlauts and CVS via Eclipse than solving the OPs problem.

Timo


Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.