- How to specify the path to access a file in both windows and linux uniquely using slash seperator
- 4 Answers 4
- Java File Path Windows/Linux [closed]
- 5 Answers 5
- PATH and CLASSPATH
- Update the PATH Environment Variable (Microsoft Windows)
- Update the PATH Variable (Solaris and Linux)
- Checking the CLASSPATH variable (All platforms)
How to specify the path to access a file in both windows and linux uniquely using slash seperator
I have an application written in java in which forward slash to specify the file and directory path . The file and directory can access when the application run on linux. But when it run on windows it says an error that the specified path is incorrect.How to uniquely specify the path of the file. In java iam using this command:
public static final String WD ="/qark-master/qark/qarkMain.py"; public static final String MANIFESTPATH="/apktool/AndroidManifest.xml";
4 Answers 4
As mentioned by Jim Garrison, forward slash works in Windows as well as in Unix. Problem is with drive letter or root directory. When in Windows path defined from root like /qark-master it is a root directory of the current drive. But. use absolute path in the code either in Windows with drive letter or from root in Linux is not a good idea. Much better is to use relative path either from current running directory or special environment variable. Then you can use forward slash and do not care about path separator.
From other hands — there is a System property in JVM called «file.separator» and it is possible to construct a path with it according to OS. Of course problem for absolute path with drive letter for Windows is there anyway.
Yes, that’s correct i am appending /qark-master/qark/qarkMain.py with the current working directory in widows . Working directory will be in backslash.The qarkMain.py file is exist in the application directory not from the system.So in order to access qarkMain.py how to say the path independently
Java File Path Windows/Linux [closed]
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
What is the best solution to create file path in Java for this two OS. Application will be used for these OS, thus I need to create universal String. For example : For Linux:
File folderTxt = new File("/home/romankooo/work/txt/");
File folderTxt = new File("C:\\PDFMalwareDataAnalyser\\Txt\\");
Answer depends on the purpose of the folder. Creating temporary files? Providing configuration files? Reading and writing data files? Storing user preferences? Etcetera. For each of those purposes there are well defined cross platform solutions.
5 Answers 5
The best thing is to let java decide that for you like this
File folderTxt = new File(File.separator + "home" + File.separator + "romankooo" + File.separator + "work" + File.separator + "txt" + File.separator);
It is good if the file path is visible somewhere. If user can’t see the path then simpler solution is to use slash ‘/’ everywhere.
You can use slash character as file separator for both OS, in other words you can use C:/PDFMalwareDataAnalyser/Txt/ instead of C:\\PDFMalwareDataAnalyser\\Txt\\ it will still work on Windows OS.
Use System.getProperty(«os.name») for obtaining os name, depends on it set path to resource:
String resourcePath = null; switch (System.getProperty("os.name")) < case "Linux": resourcePath = "/home/romankooo/work/txt/"; break; case "Windows": resourcePath = "C:\\PDFMalwareDataAnalyser\\Txt\\"; break; >
Bad approach. Better use everywhere slash (‘/’) or File.separator as @microtone said here in other answer.
Try this line of code and according to the string return you can adjust your code
Okey, thanks..in linux run this app good bud in windows i dont can change write permissions to folder
Personally I think you’d better get the folder passed in by a system property:
java -Dfolder=C:\PDFMalwareDataAnalyser\Txt\ myapp
This one you can use like this:
public File folderTxt = new File(System.getProperty("folderTxt"));
Or pass the folder by a program argument:
java myapp C:\PDFMalwareDataAnalyser\Txt\
And then use it like this:
public File folderTxt = new File(args[1]);
But if you’re sticking to use constants in your code, you can use it like this:
public File folderTxt = new File(String.join(File.separator,"C:","PDFMalwareDataAnalyser","Txt"));
Or a newer version of this would be:
public File folderTxt = new File(Paths.get("C:","PDFMalwareDataAnalyser","Txt").toString());
Or you could also read a property file and store the path in that one. This would work for different OSes, you only have to create the property files before:
String propertyFileName = String.format("folderSettings-%s.properties", System.getProperty("os.name").replaceAll(" ","_")); Properties p = new Properties(); try (InputStream is = getClass().getResourceAsStream(propertyFileName)) < p.load(is); String folderName = p.getProperty("folderName"); folderTxt = new File(folderName); >catch (Exception e) < // log if error occurs. e.printStackTrace(); >
PATH and CLASSPATH
This section explains how to use the PATH and CLASSPATH environment variables on Microsoft Windows, Solaris, and Linux. Consult the installation instructions included with your installation of the Java Development Kit (JDK) software bundle for current information.
After installing the software, the JDK directory will have the structure shown below.
The bin directory contains both the compiler and the launcher.
Update the PATH Environment Variable (Microsoft Windows)
You can run Java applications just fine without setting the PATH environment variable. Or, you can optionally set it as a convenience.
Set the PATH environment variable if you want to be able to conveniently run the executables ( javac.exe , java.exe , javadoc.exe , and so on) from any directory without having to type the full path of the command. If you do not set the PATH variable, you need to specify the full path to the executable every time you run it, such as:
C:\Java\jdk1.7.0\bin\javac MyClass.java
The PATH environment variable is a series of directories separated by semicolons ( ; ). Microsoft Windows looks for programs in the PATH directories in order, from left to right. You should have only one bin directory for the JDK in the path at a time (those following the first are ignored), so if one is already present, you can update that particular entry.
The following is an example of a PATH environment variable:
C:\Java\jdk1.7.0\bin;C:\Windows\System32\;C:\Windows\;C:\Windows\System32\Wbem
It is useful to set the PATH environment variable permanently so it will persist after rebooting. To make a permanent change to the PATH variable, use the System icon in the Control Panel. The precise procedure varies depending on the version of Windows:
- Select Start, select Control Panel. double click System, and select the Advanced tab.
- Click Environment Variables. In the section System Variables, find the PATH environment variable and select it. Click Edit. If the PATH environment variable does not exist, click New .
- In the Edit System Variable (or New System Variable) window, specify the value of the PATH environment variable. Click OK. Close all remaining windows by clicking OK.
- From the desktop, right click the My Computer icon.
- Choose Properties from the context menu.
- Click the Advanced tab (Advanced system settings link in Vista).
- Click Environment Variables. In the section System Variables, find the PATH environment variable and select it. Click Edit. If the PATH environment variable does not exist, click New .
- In the Edit System Variable (or New System Variable) window, specify the value of the PATH environment variable. Click OK. Close all remaining windows by clicking OK.
- From the desktop, right click the Computer icon.
- Choose Properties from the context menu.
- Click the Advanced system settings link.
- Click Environment Variables. In the section System Variables, find the PATH environment variable and select it. Click Edit. If the PATH environment variable does not exist, click New .
- In the Edit System Variable (or New System Variable) window, specify the value of the PATH environment variable. Click OK. Close all remaining windows by clicking OK.
Note: You may see a PATH environment variable similar to the following when editing it from the Control Panel:
%JAVA_HOME%\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem
Variables enclosed in percentage signs ( % ) are existing environment variables. If one of these variables is listed in the Environment Variables window from the Control Panel (such as JAVA_HOME ), then you can edit its value. If it does not appear, then it is a special environment variable that the operating system has defined. For example, SystemRoot is the location of the Microsoft Windows system folder. To obtain the value of a environment variable, enter the following at a command prompt. (This example obtains the value of the SystemRoot environment variable):
Update the PATH Variable (Solaris and Linux)
You can run the JDK just fine without setting the PATH variable, or you can optionally set it as a convenience. However, you should set the path variable if you want to be able to run the executables ( javac , java , javadoc , and so on) from any directory without having to type the full path of the command. If you do not set the PATH variable, you need to specify the full path to the executable every time you run it, such as:
% /usr/local/jdk1.7.0/bin/javac MyClass.java
To find out if the path is properly set, execute:
This will print the version of the java tool, if it can find it. If the version is old or you get the error java: Command not found, then the path is not properly set.
To set the path permanently, set the path in your startup file.
For C shell ( csh ), edit the startup file (~/.cshrc ):
set path=(/usr/local/jdk1.7.0/bin $path)
For bash , edit the startup file ( ~/.bashrc ):
PATH=/usr/local/jdk1.7.0/bin:$PATH export PATH
For ksh , the startup file is named by the environment variable, ENV . To set the path:
PATH=/usr/local/jdk1.7.0/bin:$PATH export PATH
For sh , edit the profile file ( ~/.profile ):
PATH=/usr/local/jdk1.7.0/bin:$PATH export PATH
Then load the startup file and verify that the path is set by repeating the java command:
% source ~/.cshrc % java -version
Checking the CLASSPATH variable (All platforms)
The CLASSPATH variable is one way to tell applications, including the JDK tools, where to look for user classes. (Classes that are part of the JRE, JDK platform, and extensions should be defined through other means, such as the bootstrap class path or the extensions directory.)
The preferred way to specify the class path is by using the -cp command line switch. This allows the CLASSPATH to be set individually for each application without affecting other applications. Setting the CLASSPATH can be tricky and should be performed with care.
The default value of the class path is «.», meaning that only the current directory is searched. Specifying either the CLASSPATH variable or the -cp command line switch overrides this value.
To check whether CLASSPATH is set on Microsoft Windows NT/2000/XP, execute the following:
On Solaris or Linux, execute the following:
If CLASSPATH is not set you will get a CLASSPATH: Undefined variable error (Solaris or Linux) or simply %CLASSPATH% (Microsoft Windows NT/2000/XP).
To modify the CLASSPATH , use the same procedure you used for the PATH variable.
Class path wildcards allow you to include an entire directory of .jar files in the class path without explicitly naming them individually. For more information, including an explanation of class path wildcards, and a detailed description on how to clean up the CLASSPATH environment variable, see the Setting the Class Path technical note.
Previous page: Miscellaneous Methods in System
Next page: Questions and Exercises: The Platform Environment