java在linux创建文件 linux java
大家好,如果您还对java在linux创建文件不太了解,没有关系,今天就由本站为大家分享java在linux创建文件的知识,包括linux java的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!
如何用java在指定目录下创建一个文件夹
具体的创建方法参照下面的实例:
public class FileTest{
publicstaticvoidmain(String[]args){
//根据系统的实际情况选择目录分隔符(windows下是,linux下是/)
Stringseparator=File.separator;
Stringdirectory="myDir1"+separator+"myDir2";
//以下这句的效果等同于上面两句,windows下正斜杠/和反斜杠都是可以的
//linux下只认正斜杠,为了保证跨平台性,不建议使用反斜杠(在java程序中是转义字符,用\来表示反斜杠)
//Stringdirectory="myDir1/myDir2";
StringfileName="myFile.txt";
//在内存中创建一个文件对象,注意:此时还没有在硬盘对应目录下创建实实在在的文件
Filef=newFile(directory,fileName);
if(f.exists()){
//文件已经存在,输出文件的相关信息
System.out.println(f.getAbsolutePath());
System.out.println(f.getName());
System.out.println(f.length());
}else{
//先创建文件所在的目录
f.getParentFile().mkdirs();
try{
//创建新文件
f.createNewFile();
}catch(IOExceptione){
System.out.println("创建新文件时出现了错误。。。");
e.printStackTrace();
}
}
}
}
Java File 操作在windows和linux的不同
具体的创建方法参照下面的实例:publicclassFileTest{publicstaticvoidmain(String[]args){//根据系统的实际情况选择目录分隔符(windows下是,linux下是/)Stringseparator=File.separator;Stringdirectory="myDir1"+separator+"myDir2";//以下这句的效果等同于上面两句,windows下正斜杠/和反斜杠都是可以的//linux下只认正斜杠,为了保证跨平台性,不建议使用反斜杠(在java程序中是转义字符,用\来表示反斜杠)//Stringdirectory="myDir1/myDir2";StringfileName="myFile.txt";//在内存中创建一个文件对象,注意:此时还没有在硬盘对应目录下创建实实在在的文件Filef=newFile(directory,fileName);if(f.exists()){//文件已经存在,输出文件的相关信息System.out.println(f.getAbsolutePath());System.out.println(f.getName());System.out.println(f.length());}else{//先创建文件所在的目录f.getParentFile().mkdirs();try{//创建新文件f.createNewFile();}catch(IOExceptione){System.out.println("创建新文件时出现了错误。。。");e.printStackTrace();}}}}
如何在linux下创建一个简单的JNI程序HelloWorld
JNI全名是Java Native Interface,通过JNI技术可以实现Java和其他编程语言的互相调用。这里我们使用的是Java和C的互相调用,Java提供本地接口,C实现该本地接口。
我使用的是RHEL 5,主要是为了测试一下在Linux平台下,了解JNI技术是如何实现的。通过一个HelloWorld实例,具体过程在下面讲解。
首先,实现的是Java本地接口Hello.java,代码如下所示:
classHelloWorld{
publicnativevoidsayHello();
static{
System.loadLibrary("HelloWorld");
}
publicstaticvoidmain(String[]args){
(newHelloWorld()).sayHello();
}
}
其中,方法声明为native,其实HelloWorld类就相当于一个接口,是为其他编程语言声明的接口。System.loadLibrary("HelloWorld");语句是一个static块,也就是在该HelloWorld类加载的时候进行执行。其中,该语句实现了加载本地的动态连接库(DLL),在Linux平台下,动态连接库文件是以.so作为扩展名的,也就是标准对象(Standard Object)。
对该本地接口类进行编译:
[root@localhost jni]# javac HelloWorld.java
接着,通过编译的HelloWorld.class文件,生成C语言的头文件,执行命令:
[root@localhost jni]# javah-jni HelloWorld
可以看到,在当前目录下生成一个HelloWorld.h文件,该文件就是C的接口文件,为使用C实现Java接口中定义的方法,可以发现在HelloWorld.h中有一个方法声明:
#ifndef__HelloWorld__
#define__HelloWorld__
#include<jni.h>
#ifdef__cplusplus
extern"C"
{
#endif
JNIEXPORTvoidJNICALLJava_HelloWorld_sayHello(JNIEnv*env,jobject);
#ifdef__cplusplus
}
#endif
#endif/*__HelloWorld__*/
然后,用C实现该方法,在HelloWorld.c文件中,代码如下:
#include<jni.h>
#include"HelloWorld.h"
#include<stdio.h>
JNIEXPORTvoidJNICALLJava_HelloWorld_sayHello(JNIEnv*env,jobjectobj){
printf("Hello,theWorld!!!");
}
这里,方法签名为Java_HelloWorld_sayHello(JNIEnv*env, jobject obj),添加了形参obj,否则无法通过编译。
接下来,生成动态连接库libHelloWorld.so,执行命令:
[root@localhost jni]# gcc-fPIC-shared-o libHelloWorld.so HelloWorld.c
可以在当前目录下看到libHelloWorld.so,动态连接库文件名称以lib开头。将该文件拷贝到usr/lib目录下面,就可以测试了。
现在执行如下命令进行测试:
[root@localhost jni]# java HelloWorld
输出如下:
Hello,the World!!!
这只是一个非常简单的例子,主要是了解JNI在Linux下该如何用。在实际应用中,可能会非常复杂,并且要记住,一旦使用了JNI技术,系统的可移植性被破坏了。有些应用中,正是基于这种特性实现,比如限制软件的传播使用,保护开发商权益,等等。