2

我有下面的代码。

以下源代码来自文件 x.java。hi.html 与 x.java 位于同一目录中。

即使文件存在,我也会收到文件未找到异常。我错过了什么吗?

    public void sendStaticResource() throws IOException{
    byte[] bytes = new byte[1024];
    FileInputStream fis = null;

    try{
        File file = new File("hi.html");

        boolean p  = file.exists();

        int i = fis.available();

        fis = new FileInputStream(file);

        int ch = fis.read(bytes, 0, 1024);

        while(ch!=-1){
            output.write(bytes, 0, ch);
            ch = fis.read(bytes, 0, 1024);
        }

    }catch(Exception e){
        String errorMessage = "file not found";
        output.write(errorMessage.getBytes());
    }finally {
        if(fis != null){
            fis.close();
        }

    }

}
4

6 回答 6

4

.java 文件的目录不一定是你的代码运行的方向!您可以通过以下示例检查程序的当前工作目录:

 System.out.println( System.getProperty( "user.dir" ) );

您可以使用 System.getProperty("user.dir") 字符串使您的相对文件名成为绝对文件名!只需将其添加到您的文件名即可:)

于 2011-06-07T17:46:01.050 回答
3

看看你的“user.dir”属性。

String curDir = System.getProperty("user.dir");

这就是程序将搜索没有完整路径的文件的地方。

于 2011-06-07T17:45:51.530 回答
0
  • 在捕获 Exception 之前捕获 FileNotFoundException 以确保它是真正的 Exception 类型。
  • 由于您没有给出文件的绝对位置,因此它从您的工作目录中搜索。您可以将绝对路径存储在属性文件中并使用它来代替,或者使用它System.getProperty("user.dir")来返回您正在从中运行 Java 应用程序的目录。

从属性文件中获取键值的代码

private void getPropertyFileValues() {
    String currentPath = System.getProperty("user.dir") + System.getProperty("file.separator") + "Loader.properties";
    FileInputStream fis = null;
    try {
        fis = new FileInputStream(currentPath);
    } catch (FileNotFoundException ex) {
        ex.printStackTrace();
    }
    Properties props = new Properties();
    try {
        props.load(fis);
    } catch (IOException ex) {
        ex.printStackTrace();
    }
    String filePath= props.getProperty("FILE_PATH");
    try {
        fis.close();
    } catch (IOException ex) {
        ex.printStackTrace();
    }
}
于 2011-06-07T18:10:06.230 回答
0

我猜你得到一个NullPointerException

FileInputStream fis = null;

然后调用:

int i = fis.available();

将导致一个NullPointerException,因为第一个非空分配fis是稍后:

fis = new FileInputStream(file);
于 2011-06-07T18:14:16.537 回答
0
File Handling in Java:

Use File class for Representing and manipulating file or folder/directory.
   you can use constructor :
   ex. File file = new File("path/file_name.txt");
             or
       File file = new File("Path","file_name");

 File representation example: 

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

public class FileRepresentation {
    public static void main(String[] args) {
    File f =new File("path/file_name.txt");
    if(f.exists()){
        System.out.println("Name " + f.getName());
        System.out.println("Absolute path: " +f.getAbsolutePath());
        System.out.println("Is writable " +f.canWrite());
        System.out.println("Is readable " + f.canRead());
        System.out.println("Is File " + f.isFile());
        System.out.println("Is Directory " + f.isDirectory());
        System.out.println("Last Modified at " + new Date(f.lastModified()));
        System.out.println("Length " + f.length() +"bytes long.");
    }//if
    }//main
}//class
于 2017-08-16T10:03:01.480 回答
0
Write data character by character, into Text file by Java: 

use FileWriter Class-


import java.io.FileWriter;
import java.io.PrintWriter;
import java.io.Writer;

    public class WriteFile {

    public static void main(String[] args) throws Exception{
       //File writer takes chars and convert into bytes and write to a file 
        FileWriter writer = new FileWriter("path/file_name.txt");
       //if file not exits then created it, else override data
            writer.write('A'); 
            writer.write('E');
            writer.write('I');
            writer.write('O');
            writer.write('U');  

            writer.close();
    System.out.println("Successfully Written");
}
}
于 2017-08-16T10:09:56.347 回答