2017-08-24 12 views
1

このプログラムは、ユーザーが入力した指定のディレクトリにファイルを作成するために作成されています。ユーザーは、名前とファイル拡張子を指定することもできます。コードの最新の変更がマークされます。私がやった最新のことは、プログラムがユーザーが拡張子を追加したのか、拡張子が有効であるのかをプログラムが知ることができるように、コード化された方法でした。赤線がないのにJavaでエラーが出る

java.lang.ExceptionInInitializerError 
Caused by: java.lang.NullPointerException 
    at filecreator.coolversion.FileCreatorCoolversion.<clinit> 
(FileCreatorCoolversion.java:13) 
Exception in thread "main" 
C:\Users\deadm\AppData\Local\NetBeans\Cache\8.2\executor- 
snippets\run.xml:53: Java returned: 1 

^エラー

コード:

package filecreator.coolversion; 

import java.io.File; 
import java.io.IOException; 
import java.util.*; 

public class FileCreatorCoolversion { 

public static Scanner sc = new Scanner(System.in); 
public static boolean success = false; 
public static String filename; 
public static String filedir; 
public static String fileexten = filename.substring(filename.lastIndexOf(".") + 1); //RECENT CHANGE HERE 
public static File file; 
public static File dir; 

public static void main(String[] args) throws IOException { 

    System.out.println("********************************"); 
    System.out.println("* Welcome to File Creator 2.0! *"); 
    System.out.println("********************************"); 
    System.out.println(" "); 

    while(!success) { 

     System.out.println("Would you like to create a file? Y/N?"); 
     String usrans = sc.nextLine(); 

     if(usrans.equalsIgnoreCase("y")) { 

      System.out.println("Proceeding with file creation..."); 
      break; 

     } else if(usrans.equalsIgnoreCase("n")) { 

      System.out.println("Exiting Program..."); 
      System.exit(0); 

     } else if(!usrans.equalsIgnoreCase("y") || !usrans.equalsIgnoreCase("n")) { 

      System.out.println("That is not a valid answer! Please try again!"); 
      System.out.println(" "); 
     } 
    } 

    while(!success) { 

     System.out.println(" "); 
     System.out.println("Please enter a valid filename:"); 
     filename = sc.nextLine(); 

     if(filename.isEmpty()) { 

      System.out.println("Please enter a file name!"); 
      break; 

     } else if(filename.contains("/") || filename.contains(":") || 
        filename.contains("*") || filename.contains("?") || 
        filename.contains("<") || filename.contains(">") || 
        filename.contains("|") || filename.contains("\"") || 
        filename.contains("\\")) { 

      System.out.println("Please do not include/\\ : * ? \" < > |"); 

     } else if(!filename.contains(".")) { 

      System.out.println("Please add a apropriate file extensions"); 

     } else if (!fileexten.isEmpty() || fileexten.contains("[^\\p{IsDigit}\\p{IsAlphabetic}]")) { //RECENT CHANGE HERE 

      System.out.println("Please specify a valid file extension!"); 

     } else { 

      System.out.println(" "); 
      System.out.println("File name \"" + filename + "\" chosen"); 
      break; 
     } 
    } 

     System.out.println(" "); 
     System.out.println("Where would you like to have your file saved?"); 
     System.out.println("Please enter a valid directory"); 

    while(!success) { 

     filedir = sc.nextLine(); 

     if(!filename.contains(":")) { 

      System.out.println(" "); 
      System.out.println("Please enter a valid directory!"); 

     } else if(!filename.contains("\\")) { 

      System.out.println(" "); 
      System.out.println("Please enter a valid directory!"); 

     } else { 

      System.out.println("File directory \"" + filedir + "\" chosen"); 
      break; 
     } 
    } 

    System.out.println(" "); 
    System.out.println("Creating file..."); 

} 

}

エラーが私を助けてくださいどこから来ている私が言うことができません。私は今のところプログラムをデバッグするのが得意ではなく、それは私が作業しなければならないことの一つです。私を助けてください。

答えて

2

あなたはこれを行うことはできません。

public static String fileexten = filename.substring(filename.lastIndexOf(".") + 1); 

あなたのファイル名がnullです。 filenameが入力されたらメソッドの中で行います。

0

ファイル名はまだnullです。

while(!success) { 
System.out.println(" "); 
System.out.println("Please enter a valid filename:"); 
filename = sc.nextLine(); 
fileexten = filename.substring(filename.lastIndexOf(".") + 1); 
:だから、この最初の操作を行います。ファイル名が値を与えされた後、すぐに初期化

public static String fileexten;