1.先看下四个静态变量

static String pathSeparator
The system-dependent path-separator character, represented as a string for convenience.
static char pathSeparatorChar
The system-dependent path-separator character.
static String separator
The system-dependent default name-separator character, represented as a string for convenience.
static char separatorChar
The system-dependent default name-separator character.

由于windows和unix内核的系统路径表示方式不一致(windows为'\',unix内核的为'/'),所以java提供了公用的路径分割符,根据不同的系统自动变换,但是在实际使用中,都使用'/',windows和unix内核系统都支持。

Linux下测试

public class FileTest {
    public static void main(String[] args) {
        System.out.println(File.pathSeparator);
        System.out.println(File.pathSeparatorChar);
        System.out.println(File.separator);
        System.out.println(File.separatorChar);
    }
}

输出

:
:
/
/

 

2.File类的构造方法

File(File parent, String child)
Creates a new File instance from a parent abstract pathname and a child pathname string.
File(String pathname)
Creates a new File instance by converting the given pathname string into an abstract pathname.
File(String parent, String child)
Creates a new File instance from a parent pathname string and a child pathname string.
File(URI uri)
Creates a new File instance by converting the given file: URI into an abstract pathname.

第一种

    @Test
    public void test1() throws Exception{
        File parent = new File("/joey/soft");
        File son = new File(parent,"son.txt");
        System.out.println(son.getAbsolutePath());
        System.out.println(son.getParent());
        System.out.println(parent.getName());
    }

输出

/joey/soft/son.txt
/joey/soft
soft

第二种

    @Test
    public void test2() throws Exception{
        File son = new File("/joey/soft/son.txt");
        System.out.println(son.getAbsolutePath());
        System.out.println(son.getParent());
    }

输出

/joey/soft/son.txt
/joey/soft

第三种

    @Test
    public void test3() throws Exception{
        File son = new File("/joey/soft","son.txt");
        System.out.println(son.getAbsolutePath());
        System.out.println(son.getParent());
    }

输出:

/joey/soft/son.txt
/joey/soft

 

第四种

    @Test
    public void test4() throws Exception{
        File f = new File("/joey/soft","son.txt");
        File son = new File(f.toURI());
        System.out.println(son.getAbsolutePath());
        System.out.println(son.getParent());
    }    

输出

/joey/soft/son.txt
/joey/soft

 

当然也可以不写绝对路径,写相对路径。

@Test
    public void test5() throws Exception{
        File son = new File("test.txt");
        System.out.println(son.getAbsolutePath());
        System.out.println(son.getParent());
    }

输出

/home/joey/eclipse/workspace/IOTest/test.txt
null

 

拷贝文件的例子,不一定正确

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class FileUtils {
    
    /**
     * copy file
     * @param srcPath eg. /home/joey/soft/aa.txt
     * @param destPath    eg. /home/joey/soft/aa.txt
     */
    public static void copyFile(String srcPath,String destPath) {
        File src = new File(srcPath);
        File desc = new File(destPath);
        
        if(!src.exists()){
            System.out.println("src is not found");
            return ;
        }
        
//        if(!desc.isFile()){
//            System.out.println("desc is not a file");
//            return;
//        }
        
        
        InputStream is = null;
        OutputStream out = null;
        try {
            is = new FileInputStream(src);
            out = new FileOutputStream(desc);
            
            int len = 0;
            byte b[] = new byte[1024];
            while((len=is.read(b))!=-1){
                out.write(b, 0, len);
            }
            out.flush();
            
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(is!=null){
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(out!=null){
                try {
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    
    /**
     * copyFolder Recursively
     * @param srcPath  eg. /home/joey/soft/test
     * @param destPath eg. /home/joey/soft/test2
     */
    public static void copyFolder(String srcPath,String destPath){
        
        File src = new File(srcPath);
        File dest = new File(destPath);
        copyFileOrFolderUtil(src, dest);
        
    }
    
    public static void copyFolder(File src,File dest){
        
        copyFileOrFolderUtil(src, dest);
        
    }
    
    private static void copyFileOrFolderUtil(File f,File destFile){
        
        if(f.isDirectory()){
            destFile = new File(destFile,f.getName());
            destFile.mkdirs();
            
            File[] fs = f.listFiles();
            for(File f1 : fs){
                copyFileOrFolderUtil(f1, destFile);
            }
            
        }else{
            System.out.println(f.getAbsolutePath());
            System.err.println(destFile.getAbsolutePath()+"/"+f.getName());
            FileUtils.copyFile(f.getAbsolutePath(), destFile.getAbsolutePath()+"/"+f.getName());
        }
    }
    
}

 

 

 

 

参考:http://docs.oracle.com/javase/7/docs/api/java/io/File.html#File(java.net.URI)

posted on 2016-10-16 14:44  woqiaoxun  阅读(262)  评论(0编辑  收藏  举报