2012-11-04 5 views
2

수업 중에 사용할 수 있도록 Java로 출석 프로그램을 작성하고 있습니다. 내 목표는 학생들이 클래스 파일을 자신의 계정에 다운로드하도록 할 수있게하는 것입니다. 우리는 같은 네트워크에서 작업하게 될 것입니다. 그런 다음 사용자 이름과 암호를 매일 바꿀 것입니다. 내 프로그램은 정상적으로 작동하지만 나는 극복 할 수없는 버그가 발생했습니다.java.nio.file.Files.setOwner()가 허용되지 않습니다.

언제든지 처음으로 attend.java를 실행하면 지정된 디렉토리에 계정의 새 텍스트 파일이 만들어지고 그 프로그램에 실행 된 사용자의 사용자 이름이 파일에 추가됩니다 (현재 it 그냥 프로그램의 첫 번째 인수를 파일에 추가하지만 더 정확하고 아무도 잘못된 사용자 이름을 제공 할 수 있도록 수정하여 학생 목록을 컴파일합니다.

>> java attend desadams cheesecake 

지정된 암호 "치즈"를 타고는 하루의 암호와 일치하는 경우라는 새로운 TEXTFILE 만드는 중 "(오늘 날짜)가 .txt를"하고 이름을 "쓸 것이다 : 실행 예를 들어

, desadams "를 (그날 처음으로 실행하는 경우) 아니면 단순히 기존의"(오늘 날짜) .txt "파일에 사용자 이름"desadams "를 추가하십시오.

public static void createFile(File file) throws IOException{ 
    Path newFile = file.toPath(); 

    //create new file and set permissions 
    /* For the purposes of this program, the new file (the attendance list) must readable and writable to everbody 
    * in order for this program to work properly when run from their user, because this program both reads and modif\ 
ies. 
    */ 
    Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rwxrw-rw-"); 
    Files.createFile(newFile); 
    Files.setPosixFilePermissions(newFile, perms); 

    //set owner 
    UserPrincipal owner = newFile.getFileSystem().getUserPrincipalLookupService().lookupPrincipalByName("desadams"); 
    Files.setOwner(newFile, owner); 

    //set group 
    GroupPrincipal group = newFile.getFileSystem().getUserPrincipalLookupService().lookupPrincipalByGroupName("studen\ 
ts"); 
    Files.getFileAttributeView(newFile, PosixFileAttributeView.class).setGroup(group); 
    } 

내가 파일을 생성하고 동시에 권한을 설정할 수 없습니다 :

나는 사용자 권한이있는 파일을 만들 수 java.nio.file 패키지를 활용하여 내 자신의를 CreateFile() 메소드를 썼다 왜냐하면 계정의 umask가 방해가 될 것이므로 두 단계로 수행 했으므로 제대로 작동합니다.

이제 우리는 내 자신의 계정에서이 프로그램을 컴파일하고 실행할 수 있지만 다른 계정에서이 프로그램을 실행하려고 할 때 setOwner() 메서드를 변경하여 my 대신에 임의의 사용자 이름을 사용하게했습니다. 다른 계정에서 프로그램을 실행하는 조건을 더 잘 시뮬레이트하기 위해 소유하고 있습니다. 그리고 실패했습니다. 프로그램을 실행하는 사람 이외의 사람에게 소유자를 설정하려고하면 "조작이 허용되지 않음"오류가 발생합니다.

나는 이미 네트워크 계정 중 루트 계정에 대한 액세스 권한이 없기 때문에 chown이 작동하지 않는다는 것을 알고 있었지만 Java에서 같은 일을하지 못하리라고는 생각하지 않았습니다. 말이 되네.

어쨌든이 문제를 해결할 수있는 방법이 있습니까? 가장 간단한 방법은 매일 다른 사람보다 먼저 프로그램을 실행하여 내 참석자 파일을 내 사용자 이름으로 만든 다음 소유자를 내 이름으로 설정하는 것에 대해 걱정할 필요가 없도록하는 것입니다. 프로그램 자체 내의 사용자 이름; 그것은 항상 출석 파일을 찾을 것이므로 적절한 파일 속성으로 생성하지 않아도됩니다. 그러나 그것이 내가하는 일일지도 모르지만 누군가 프로그램 자체 내에서 소유자를 설정하는 방법을 제안하는 해결책이 있는지 알고 싶습니다.

감사합니다. 죄송합니다. 긴 게시물이었습니다.

답변

0

사용자가 시스템의 sudoers 인 경우 sudo java attend desadams cheesecake 일 수 있습니다. 그러나, 나는 그들이 sudoers 아니므로, 따라서 파일을 처음으로 만드는 솔루션 아마도 최고의 것입니다.

관련 문제