2016-03-19 73 views
-1

这里是我的代码片段:为什么在此代码中出现java.io.FileNotFoundException错误和java.lang.NullPointerException?

public class Compress { 
    List<String> filesinDir= new ArrayList<String>(); 

public static void main(String[] args){ 

    Compress c= new Compress(); 
    c.gzipFile(); 
    String OUTPUT_DIR= "C:\\Users\\Surya's\\Documents\\tmp.zip"; 
    File dir= new File(" C:\\Users\\Surya's\\Documents\\tmp "); 
    c.zipDirectory(dir, OUTPUT_DIR); 
} 

public void gzipFile(){ 

    String OUTPUT_GZIP_FILE= " C:\\Users\\Surya's\\Documents\\file1.gz "; 
    String SOURCE_FILE= " C:\\Users\\Surya's\\Documents\\file1.txt "; 
    byte[] b= new byte[1024]; 
    int len; 

    try{ 
    FileOutputStream fos= new FileOutputStream(OUTPUT_GZIP_FILE); 
    GZIPOutputStream gz= new GZIPOutputStream(fos); 
    FileInputStream in= new FileInputStream(SOURCE_FILE); 
     while((len= in.read(b))!= -1){ 
      gz.write(b, 0, len); 
     } 
     fos.close(); 
     in.close(); 
     gz.finish(); 
     gz.close(); 
    } 

    catch(IOException e){ 
     e.printStackTrace(); 
    } 
} 

public void zipDirectory(File dir, String OUTPUT_DIR){ 
    try{ 
     ListofFiles(dir); 
     FileOutputStream of= new FileOutputStream(OUTPUT_DIR); 
     ZipOutputStream gzdir= new ZipOutputStream(of); 
     for(String filepath : filesinDir){ 
      ZipEntry ze= new  ZipEntry(filepath.substring(dir.getAbsolutePath().length()+1, filepath.length())); 
      gzdir.putNextEntry(ze); 
      byte[] b= new byte[1024]; 
      int len; 
      FileInputStream fi= new FileInputStream(filepath); 
      while((len=fi.read(b))!=-1){ 
       of.write(b, 0, len); 
      } 
      gzdir.closeEntry(); 
      fi.close(); 
     } 
     gzdir.close(); 
     of.close(); 
    } 
    catch(IOException e){ 
     e.printStackTrace(); 
    } 
} 

public void ListofFiles(File dir) throws IOException{ 
    File[] files= dir.listFiles(); 
    for(File file : files){ 
     if(file.isFile()) filesinDir.add(file.getAbsolutePath()); 
     else ListofFiles(file); 
    } 
    } 
} 

我想压缩单个文件以及以及与它文件的目录。 gzipFile()处理单个文件的压缩,而zipDirectory()调用函数ListofFiles()来排列数组中的抽象路径名。 zipDirectory使用的ZipEntry从文件的开头开始写作并定位

错误消息的开始是为什么正在显示一个FileNotFound异常,因为该程序应该创建一个文件文件1

java.io.FileNotFoundException: C:\Users\Surya's\Documents\file1.gz (The filename, directory name, or volume label syntax is incorrect) 
at java.io.FileOutputStream.open(Native Method) 
at java.io.FileOutputStream.<init>(FileOutputStream.java:221) 
at java.io.FileOutputStream.<init>(FileOutputStream.java:110) 
at com.assignment.java.Compress.gzipFile(Compress.java:29) 
at com.assignment.java.Compress.main(Compress.java:15) 
Exception in thread "main" java.lang.NullPointerException 
at com.assignment.java.Compress.ListofFiles(Compress.java:73) 
at com.assignment.java.Compress.zipDirectory(Compress.java:48) 
at com.assignment.java.Compress.main(Compress.java:18) 

.gz在Documents文件夹中。

+3

尝试在文件名中去除前导空格,然后再试一次。 –

+2

'dir.listFiles();''listFiles'将返回'null'如果路径不存在或不是目录 – MadProgrammer

回答

2

你不应该把额外的空间放在路径上。

尝试使用

String OUTPUT_DIR= "C:\\Users\\Surya's\\Documents\\tmp.zip"; 
File dir= new File("C:\\Users\\Surya's\\Documents\\tmp"); 

String OUTPUT_GZIP_FILE= "C:\\Users\\Surya's\\Documents\\file1.gz"; 
String SOURCE_FILE= "C:\\Users\\Surya's\\Documents\\file1.txt"; 

代替

String OUTPUT_DIR= "C:\\Users\\Surya's\\Documents\\tmp.zip"; 
File dir= new File(" C:\\Users\\Surya's\\Documents\\tmp "); 

String OUTPUT_GZIP_FILE= " C:\\Users\\Surya's\\Documents\\file1.gz "; 
String SOURCE_FILE= " C:\\Users\\Surya's\\Documents\\file1.txt "; 
+0

谢谢@MikeCAT .........解决 –

相关问题