开发者

Permissions for Java application on Ubuntu

开发者 https://www.devze.com 2023-02-22 16:47 出处:网络
I have a NetBeans RCP application th开发者_Go百科at\'s currently working on Windows and I\'m trying to make Linux compatible. The application creates folders and files and modify files as well.

I have a NetBeans RCP application th开发者_Go百科at's currently working on Windows and I'm trying to make Linux compatible. The application creates folders and files and modify files as well.

It works fine on Windows without any modification but on Ubuntu it fails creating folders during start up. I know it's a permission issue.

What are my options?

Can the application itself assign the permissions it needs like by running a script using ProcessBuilder?

Thanks in advance!


It all depends on who you are when running the process on Ubuntu, and the path of the folders that you're trying to create. Does this user have permissions to create the folders in that directory? What sort of data are you writing out to disk? Can you use a platform neutral mechanism thats user oriented, like Java Preferences or perhaps:

System.getProperty("user.home") -or- System.getProperty("java.io.tmpdir")?


You either need to create required folders as part of a setup process or restrict your IO to folders you have access to (the users home and the temp folder). Notice that on Linux there are standard locations where many folders should be placed and that administrators will frown upon applications that do not follow these standards.

Can you tell what files/folders you need for what purpose?

Looks like the cause of the problem is the difference in path delimiter between Windows and Linux. On linux you should use normal slashes. The error mentions the path:

/home/javier\marauroa.trace.db

As the \ is not a path delimiter but the escape character it is trying to create a file in the folder /home where it does not have permissions.

The path should be:

/home/javier/marauroa.trace.db

You might want to consider putting your apps files in a subfolder called .yourappname so then it would become

/home/javier/.yourappname/marauroa.trace.db

This is what many unix applications do and hide it in normal file listings. To get the path seperator for the system your application is running on you can use the following static field:

java.io.File.seperator
0

精彩评论

暂无评论...
验证码 换一张
取 消