파일이 존재하는 경우 File.exists()가 false를 반환합니다.
나는 어떤 논리도 찾을 수 없는 버그를 만났다.다음과 같이 작성되는 File 객체가 있습니다.
File file = new File("utilities/data/someTextFile.txt");
저는 이렇게 해요.file.exists()
, 이됩니다.false
수 (!)f.getAbsolutePath()
파일로 변환합니다.★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★Windows의 "실행" 창에 전체 경로를 복사하여 붙여넣으면 파일이 정상적으로 열립니다.
파일은 항상 존재하며 응용 프로그램 실행 중에 삭제되거나 변경되지 않습니다.로컬 머신에 있습니다.
이는 특정 상황에서만 발생하는 것으로 보입니다.장애는 언제든지 재현할 수 있지만, 장애 재현을 위한 액션에 의해 파일 객체의 경로가 변경되지 않을 것입니다.
의 file.exists()
짓으으? 츠요시권한이나 파일 잠금 등과 관련이 있습니까?
나는 윈도우 7에서:다음의 상황을 보고 있다.
file.exists() == false
file.getAbsoluteFile().exists() == true
질문에 있는 파일"var\log"절대적으로 길 정상적인 디렉터리( 아닌 가상 가게)에 기존 파일을 참고하는다는 것이다.이것은 IDE에서 볼 수 있다.
같은이 어떻게 경로가 자바 언어로 지정된 것에 대해 차이가 있는 것 같다.
를 들어,가 ""로 경우 ""로 지정됩니다.file:/C:/DEV/test.txt
File f = new File(filename);
f.exists();
반환하다false
또는 할 수 경로가 그 오솔길은 탐험가나 브라우저에서지만, 그것은 URL이 아니라 절대 파일 경로 효과가 있었을지도 모른다.
, 가 「File Path()」로 지정되어 있는 경우는, 「File Path(파일 패스)」를 참조해 주세요.C:/DEV/test.txt
File f = new File(filename);
f.exists();
반환하다true
경로가 아니다 URL이지만, 그것은 절대 경로입니다.
스프링 프레임워크와 함께 그것은 정확히 무엇인가요.ResourceUtils.getFile(filename)
- 'URL' 입니다.
파일이 존재하는 과정 사용 권한을 말할 필요는 없다는 거 그것은 반환합니다.파일을 열려고 하지만 그게 존재하는지 정상적인 방법으로 말하지 가능할 수 있다.
위의 답을 내 사건으로 도와 주지 않았다.전에 말한 바와 같이, 나는: 있었다.
file.exists() => false
file.getAbsoluteFile().exists => true
이 문제의 근본 원인은 Windows 7 머신의 소유자가 CMD의 레지스트리를 수정하여 Python과 함께 작동하도록 특정 디렉토리에서 명령을 자동으로 실행하도록 한 것입니다.이 변경으로 인해 Java 1.6 코드가 기능하지 않게 되었습니다.이 코드는 다음과 같은 특정 파일 조작에 Windows 상에서 CMD를 사용하는 것으로 보입니다.exists()
레지스트리에서 자동 실행을 삭제하면 문제가 해결되었습니다.
[ Hide extensions for known file types ]가 켜져 있는 경우 [explector]/[run windows]에 "t.txt"를 입력하면 "t.txt" 창이 열립니다.
생각할 수 있는 원인에는 여러 가지가 있으며, 앞의 답변은 그것들을 잘 문서화하고 있습니다.다만, 이 문제를 해결한 것은, 다음과 같습니다.
내 학생 중 한 명이 이 문제를 겪었는데, 나는 그것을 알아내려고 머리를 쥐어뜯을 뻔했다.겉으로 보기에는 그런 것 같았지만 그 파일은 존재하지 않았던 것으로 밝혀졌다.문제는 Windows 7이 "이미 알려진 파일 형식에 대한 파일 확장자를 숨김"으로 구성되었다는 것입니다.즉, 파일의 이름이 "data.txt"인 경우 실제 파일 이름은 "data.txt.txt"입니다.
이것이 다른 사람들이 머리털을 아끼는 데 도움이 되기를 바란다.
메서드를 호출해야 할 때마다 getAbsoluteFile() 호출을 처리하지 않으려면 이미 절대 경로를 사용하여 파일 인스턴스를 만드는 것이 좋습니다.이렇게 하면 효과가 있습니다.
File file = new File("utilities/data/someTextFile.txt").getAbsoluteFile();
나는 그것을 Try-catch block, BTW로 둘러싸는 것을 제안한다.
new File
명령어는 지정된 경로 이름을 사용하여 파일 인스턴스를 만듭니다.실제로 하드 드라이브에 파일이 생성되지는 않습니다.
만약 당신이 말한다면
File file = new File ("path");
file.exists()
이는 동일한 경로를 가진 기존 파일이 있는 경우에만 true를 반환할 수 있습니다.첫 번째 줄에 선언된 동일한 파일을 확인하는 경우 이 방법을 사용해야 할 수 있습니다.
File file = new File ("path");
file.createNewFile();
file.exists();
이제 이것은 사실로 돌아올 것이다.
문제를 일반화하기 위해 URL/URI를 로컬 경로로 변환하는 동안 문제가 발생합니다.
Example: URL url = file:/D:/code%20repo%20sample/sample.txt
// To remove url reference
String localPath = url.getPath();
> /D:/code%20repo%20sample/sample.txt
// Decoding reserved characters in url from hexadecimal to character
URLDecoder.decode(localPath, StandardCharsets.UTF_8.toString());
> /D:/code repo sample/sample.txt
이게 도움이 됐으면 좋겠다.
저 같은 경우에는
파일 저장 장소
filepath = Environment.getExternalStorageDirectory().getAbsolutePath()+ "/VRSI/Audio/"+encrypted_filename+".mp3";
저장 장소:
/storage/emulated/0/VRSI/Audio/82B0999F16251F0DFE849F380D6AAEEA.mp3
파일 경로를 얻었을 때
/storage/emulated/0/Android/data/com.numerotec.vrsi/files/VRSI/Audio/AF7DC6C0C0B3EF3529EC70DAEF2324E0.mp3
따라서 문자열 "Android/data/com.numerotec.vrsi/files/"를 공백으로 바꿉니다.
그 후
if (file.getAbsoluteFile().exists())
{
// write your code
}
정상적으로 동작하고 있다
반응이 좋아요 여러분.가 루트에 데 것 .C:
를 참조해 주세요.로든 구체적으로 할 수 있습니다.C:\
★★★★★★★★★★★★★★★★★」C:
★★★★★★★★★★★★★★★★★」C:/
에러가 발생할 수 있습니다.나는 이 매우 유사한 문제를 언급함으로써 해결했다.new File("C:");
합니다.File(System.getProperty("file.separator"));
또는 파일 디렉토리로 "c:"라고 하는 대신에 "\"라고 하드 코드 할 수 있습니다.을 사용법우아하진 않지만, 이 프로젝트에서 날 위해 일을 끝냈어요.
도움이 됐으면 좋겠어요.올바른 해결책은 아닐지 몰라도 적어도 나한테는 효과가 있었어하고 있어요JRE 1.6, Win 7
.건배!
Respectfully,
@Carpenter1010
If the situations where it fails involves running it as another user, and you're on Windows Vista/Windows 7, it could be caused by VirtualStore, the mechanism where Windows let an unprivileged user "write" places it normally cannot. The changes are however stored in "%USERPROFILE%\AppData\Local\VirtualStore\" which are private to each user account.
When nothing from above worked for me, I tried
filePath = filePath.trim();
This will clean your string from any unwanted charachter
FWIW, there is another place that this happens.
File("")
는 현재 디렉토리의 이름입니다. File("").exists()
보통 돌아오다false
.그File(("").getAbsoluteFile().exists()
속임수는 효과가 있고 돌아올 것이다.true
(현재 디렉토리가 존재한다고 가정합니다...)
I lately came across this same issue. What l did was to uninstall Netbeans, deleted netbeans folder from C drive, program files, update, programData, virtually everywhere. Then reinstall. Is now working fine. Don't forget to backup up netbeans project folder before taken the actions above.
Hope it helps.
With some IDE(may be) and or with some OS(ex: window), by default they don't have write access on files. So if you try to do file.exists() it will show you false. in order to fix this, do like below
if your ref variable for File is f, example: File f = new File("path");
so in order to make it work , select f by mouse and then go to Search menu > Write access>Workspace. Hopefully it will work.
I think you should use backslash instead , like this:
File file = new File("C:\\User\\utilities\\data\\someTextFile.txt"); (two backslashes , not a typo )
Should solve the problem :)
ReferenceURL : https://stackoverflow.com/questions/919918/file-exists-returns-false-when-file-exists
'programing' 카테고리의 다른 글
Vuevalidate 비동기 유효성 검사 결과가 루프로 전환됨 (0) | 2022.09.05 |
---|---|
+0과 -0이 같습니까? (0) | 2022.09.05 |
부울 객체를 Java 문자열로 변환하는 최선의 방법 (0) | 2022.09.05 |
Mysql 케이스 문이 작동하지 않습니다. (0) | 2022.09.05 |
PHP 오류 메시지 "알림:정의되지 않은 상수" 평균을 사용합니까? (0) | 2022.09.05 |