2012-12-19 2 views
-1

정보 :

그래서 특정 테트리스 게임의 최고 기록을 저장하는 간단한 클래스를 만들었습니다.java fileIO 런타임 오류

내 전체 게임이 .JAR로되어있을 때 파일에 액세스 할 수 있어야합니다. 따라서 파일 위치를 외부로 설정해야합니다.

이제는 "c : //"loctaion cuase를 사용합니다. 모든 컴퓨터에 해당합니다. 그러나 모든 컴퓨터가 LineHighscores.txt 및 TimeHighscores.txt 파일을 가지고있는 것은 확실하지 않으므로 생성해야합니다.

질문 :

난 내 코드를 실행할 때마다

오류가 발생합니다 :

c:/TimeHighscores.txt 
    c:/TimeHighscores.txt 
    dec 19, 2012 2:26:35 AM tetris.FileIO loadHighscores 
    SEVERE: null 
    java.io.IOException: Toegang geweigerd 
at java.io.WinNTFileSystem.createFileExclusively(Native Method) 
at java.io.File.createNewFile(File.java:947) 
at tetris.FileIO.loadHighscores(FileIO.java:75) 
at tetris.FileIO.getTimeScores(FileIO.java:37) 
at tetris.HighScores.<init>(HighScores.java:41) 
at tetris.Menu$2.actionPerformed(Menu.java:75) 
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) 
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) 
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased 
      (BasicButtonListener.java:252) 
at java.awt.Component.processMouseEvent(Component.java:6505) 
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321) 
at java.awt.Component.processEvent(Component.java:6270) 
at java.awt.Container.processEvent(Container.java:2229) 
at java.awt.Component.dispatchEventImpl(Component.java:4861) 
at java.awt.Container.dispatchEventImpl(Container.java:2287) 
at java.awt.Component.dispatchEvent(Component.java:4687) 
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) 
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) 
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) 
at java.awt.Container.dispatchEventImpl(Container.java:2273) 
at java.awt.Window.dispatchEventImpl(Window.java:2719) 
at java.awt.Component.dispatchEvent(Component.java:4687) 
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:723) 
at java.awt.EventQueue.access$200(EventQueue.java:103) 
at java.awt.EventQueue$3.run(EventQueue.java:682) 
at java.awt.EventQueue$3.run(EventQueue.java:680) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege 
      (ProtectionDomain.java:76) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege 
      (ProtectionDomain.java:87) 
at java.awt.EventQueue$4.run(EventQueue.java:696) 
at java.awt.EventQueue$4.run(EventQueue.java:694) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege 
      (ProtectionDomain.java:76) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:693) 
at java.awt.EventDispatchThread.pumpOneEventForFilters 
      (EventDispatchThread.java:244) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy 
      (EventDispatchThread.java:151) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java:97) 

    java.io.FileNotFoundException: c:\TimeHighscores.txt 
    (Het systeem kan het opgegeven bestand niet vinden) 
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
at tetris.FileIO.loadHighscores(FileIO.java:84) 
at tetris.FileIO.getTimeScores(FileIO.java:37) 
at tetris.HighScores.<init>(HighScores.java:41) 
at tetris.Menu$2.actionPerformed(Menu.java:75) 
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) 
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) 
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased 
      (BasicButtonListener.java:252) 
at java.awt.Component.processMouseEvent(Component.java:6505) 
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321) 
at java.awt.Component.processEvent(Component.java:6270) 
at java.awt.Container.processEvent(Container.java:2229) 
at java.awt.Component.dispatchEventImpl(Component.java:4861) 
at java.awt.Container.dispatchEventImpl(Container.java:2287) 
at java.awt.Component.dispatchEvent(Component.java:4687) 
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) 
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) 
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) 
at java.awt.Container.dispatchEventImpl(Container.java:2273) 
at java.awt.Window.dispatchEventImpl(Window.java:2719) 
at java.awt.Component.dispatchEvent(Component.java:4687) 
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:723) 
at java.awt.EventQueue.access$200(EventQueue.java:103) 
at java.awt.EventQueue$3.run(EventQueue.java:682) 
at java.awt.EventQueue$3.run(EventQueue.java:680) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege 
       (ProtectionDomain.java:76) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege 
       (ProtectionDomain.java:87) 
at java.awt.EventQueue$4.run(EventQueue.java:696) 
at java.awt.EventQueue$4.run(EventQueue.java:694) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege 
       (ProtectionDomain.java:76) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:693) 
at java.awt.EventDispatchThread.pumpOneEventForFilters 
       (EventDispatchThread.java:244) 
at java.awt.EventDispatchThread.pumpEventsForFilter 
       (EventDispatchThread.java:163) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy 
       (EventDispatchThread.java:151) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java:97) 

코드 :

public class FileIO { 
private File file; 
private Scanner filescScanner, lineScanner; 
private PrintWriter fileWriter; 
private String[][] data; 
static final String lineHighscoreTXT = "c://LineHighscores.txt", timeHighscoreTXT = "c://TimeHighscores.txt"; 


public FileIO() { 
    data = new String[100][2]; 
} 
public String[][] getLineScores(){ 
    System.out.println(lineHighscoreTXT); 
    return this.loadHighscores(lineHighscoreTXT); 
} 
public String[][] getTimeScores(){ 
    System.out.println(timeHighscoreTXT); 
    return this.loadHighscores(timeHighscoreTXT); 
} 

public void setLineScores(String name,String lines){ 
    boolean found= false; 
    data = this.getLineScores(); 
    for(int i = 0; i<data.length && !found ; i++){ 
     if(data[i][0] == null || "Niemand".equals(data[i][0])){ 
      data[i][0]=name; 
      data[i][1]=lines; 
      found=true; 
     } 

    } 
    this.saveHighscores(lineHighscoreTXT,data); 
} 
public void setTimeScores(String time, String name){ 
    boolean found= false; 
    data = this.getLineScores(); 
    for(int i = 0; i<data.length && !found ; i++){ 
     if(data[i][0] == null || "Niemand".equals(data[i][0])){ 
      data[i][0]=name; 
      data[i][1]=time; 
      found=true; 
     } 

    } 
    this.saveHighscores(timeHighscoreTXT,data); 
} 

private String[][] loadHighscores(String fileLocation){ 

int x=0; 
String test = ""; 
System.out.println(fileLocation.toString()); 
File file = new File(fileLocation); 
if (!file.exists()){ 
    try { 
      file.createNewFile(); 
     } catch (IOException ex) { 
      Logger.getLogger(FileIO.class.getName()).log(Level.SEVERE, null, ex); 
     } 
} 
try{ 
    filescScanner = new Scanner(file);} 
catch(Exception ioe){System.err.println(ioe);} 

    if (filescScanner.hasNext()){ 


     while(filescScanner.hasNextLine()&& x<100) { 

      lineScanner = new Scanner(filescScanner.nextLine()); 
      lineScanner.useDelimiter("-/-"); 


      data[x][0]=lineScanner.next();//name  
      data[x][1]=lineScanner.next();//data 
      x++; 

     } 
     lineScanner.close(); 
     filescScanner.close(); 
    } 
    else{ 
     data[0][0] = "Niemand"; 
     data[0][1] = "0"; 
    } 
    return data; 

} 
private void saveHighscores(String fileLocation, String[][] data){ 
    int x=0; 
     file = new File(fileLocation); 
     if (!file.exists()){try { 
      file.createNewFile(); 
     } catch (IOException ex) { 
      Logger.getLogger(FileIO.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 
    try { 
     fileWriter = new PrintWriter(file); 
    } catch (FileNotFoundException ex) { 
     Logger.getLogger(FileIO.class.getName()).log(Level.SEVERE, null, ex); 
    } 

    if(data.length>x){ 
     while(data.length>x && data[x][0] != null){ 
      fileWriter.println(data[x][0]+"-/-"+data[x][1]); 
      x++; 
     } 
     fileWriter.close(); 
    } 
} 



public static void main(String[] args){ 
    FileIO file = new FileIO(); 
    file.setLineScores("55555555", "KoenKevin");  
} 

} 
+0

1. C : /의 루트 디렉토리에 파일을 만들면 안됩니다. 대신 사용자 홈 디렉토리 (예 :/Users/)에 생성하십시오. 2. ('loadHighScores()'에서) 스캐너를 만들지도 데이터를 계속 스캔하는 이유는 무엇입니까? –

답변

2

내가 네덜란드어 이해하지 못하는,하지만이 방법을 믿고있어 "액세스가 거부되었습니다"?

때 java.io.IOException가 : \ 보안 목적 : Toegang는

그렇다면,이 C로 파일 쓰기를 제한 Windows에서 발생할 수를 geweigerd.

다른 위치에 글을 쓰거나 관리자 권한으로 응용 프로그램을 실행해야합니다.

+0

+1 학습 네덜란드어. 나는 그것을 읽을 때 그것을 잃어 버렸다. 귀하의 정확성은 http://translation.babylon.com/dutch/to-english/ –

+0

@Kevin Bowersox, gerrytan으로 바뀌 었습니다. 최근에 빈 디렉토리를 삭제하는 앱을 만들었지 만 C : \ 경로를 설정할 수 없어 사용자 권한으로 인해 드라이브 전체가 정리되었습니다. 관리자로 프로그램을 실행해야합니다. 퀴즈 : C : \ 드라이브에서 관리자 권한이없는 사용자는 RW 옵션 만 사용할 수 없습니다. 여전히 디렉토리 트래버스가 가능합니다. –