我正在尝试阅读文件的内容,但似乎无法正常工作。 我在网上浏览并找到了不同的实现,如图所示(read(),read2(),readLine()),但每次运行代码时,它们都会给出NullPointer异常。 请问我该怎么做才能解决这个问题。

     private String folder;
        static String filename;
        //IMPLEMENTATION 1
        private void readFile(String f) {
            try {
                InputStreamReader reader = new InputStreamReader(getClass().getResourceAsStream(f));
                String line = null;
                while ((line = readLine(reader)) != null) {
                    System.out.println(line);
                }
                reader.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
/**
         * Reads a single line using the specified reader.
         * @throws java.io.IOException if an exception occurs when reading the
         * line
         */
        private String readLine(InputStreamReader reader) throws IOException {
            // Test whether the end of file has been reached. If so, return null.
            int readChar = reader.read();
            if (readChar == -1) {
                return null;
            }
            StringBuffer string = new StringBuffer("");
            // Read until end of file or new line
            while (readChar != -1 && readChar != '\n') {
                if (readChar != '\r') {
                    string.append((char) readChar);
                }
                // Read the next character
                readChar = reader.read();
            }
            return string.toString();
        }

        //IMPLEMENTATION 2
        private String read(String file) throws IOException {
            InputStream is = getClass().getResourceAsStream(file);
            StringBuffer sb = new StringBuffer();
            int chars, i = 0;
            while ((chars = is.read()) != -1) {
                sb.append((char) chars);
            }
            return sb.toString();
        }

        //IMPLEMENTATION 3
        private String read2(String file) throws IOException {
            String content = "";
            Reader in = new InputStreamReader(this.getClass().getResourceAsStream(file));
            StringBuffer temp = new StringBuffer(1024);
            char[] buffer = new char[1024];
            int read;
            while ((read = in.read(buffer, 0, buffer.length)) != -1) {
                temp.append(buffer, 0, read);
            }
            content = temp.toString();
                    return content;
        }

        public void execute() throws IOException {
            folder = System.getProperty("fileconn.dir.photos") + "mcast/";
            String path = folder + filename + ".txt";
            FileConnection c = (FileConnection) Connector.open(path, Connector.READ_WRITE);

            try {
                // Checking if the directoy exists or not. If it doesn't exist we create it.
                if (c.exists()) {
            readFile(path);
                    //read(path);
                   // read2(path);
                    System.out.println(read(path));
                } else {
                    System.out.println(filename + ".txt does not exist. Please specify a correct file name");
                }
            } finally {
                c.close();
            }
        }

private String readLine(InputStreamReader reader) throws IOException {
        // Test whether the end of file has been reached. If so, return null.
        int readChar = reader.read();
        if (readChar == -1) {
            return null;
        }
        StringBuffer string = new StringBuffer("");
        // Read until end of file or new line
        while (readChar != -1 && readChar != '\n') {
            // Append the read character to the string. Some operating systems
            // such as Microsoft Windows prepend newline character ('\n') with
            // carriage return ('\r'). This is part of the newline character
            // and therefore an exception that should not be appended to the
            // string.
            if (readChar != '\r') {
                string.append((char) readChar);
            }
            // Read the next character
            readChar = reader.read();
        }
        return string.toString();
    }


    }

===============>>#1 票数:2 已采纳

ISSUE: 使用不正确的方法引用文件

getResourceAsStream(...)用于从二进制包(.jar)或类路径目录中加载类路径中的资源。

所以它本质上意味着, 从二进制包读取文件使用getClass()。getResourceAsStream()从设备的物理内存中读取文件使用FileConnection API。

您正在尝试从FileConnection中使用的类型的文件架构创建输入流,因此它将无法工作。 因此,为了解决您的问题,您已使用以下代码替换read(...)read2(...)readFile(...)的inputstream对象初始化

InputStreamReader reader = new InputStreamReader(in); //这里in类型为InputStream的方法的输入参数

并在execute(...)传递文件连接输入流,如下所示

readFile(c.openInputStream()); //这里c是FileConnection类型的对象

如果您在模拟器/设备中测试应用程序,则可能还需要考虑这些问题

  1. 确保System.getProperty("fileconn.dir.photos")返回NON NULL
  2. 该文件存储在系统中的适当位置

  ask by nnanna translate from so

未解决问题?本站智能推荐:

1回复

如何在j2me中读/写文本文件

我想知道如何在j2me中读取和写入.txt文件的文本帮助我谢谢...
4回复

如何在J2ME中读取字符串?

我正在使用MIDP 2.0(JSR 118),我只是注意到J2ME中没有读取器的字符串。 有谁知道你应该如何以独立于平台的方式从InputStream或InputStreamReader读取字符串(即在两个不同型号的java手机之间)?
1回复

如何使用pushregistry读取j2me midlet中收到的消息?

我不知道如何使用J2ME midlet读取移动设备中收到的消息。实际上我一直在使用短信网关将消息发送到其他手机。短信网关回复同一个移动设备,但我想阅读回复消息设备直接,而不是检查inbox。如何使用PushRegistry概念在j2me midlet中执行此操作。请为我提供好主意或示例代码...在此
2回复

在J2me中显示Png图像

我在显示PNG图像时遇到问题,因为JPG图像显示得很好。 这是获取Image的代码。 然后绘制图像,但为png 引发异常: java.lang.NullPointerException: at start.SplashScreen.paint(+56) at javax.
2回复

如何在j2me中创建textarea

下面的代码只显示文本字段,但我想包含textfield和textarea。 需要帮忙
1回复

在j2me中创建彩色图像

我需要在微版中用绿色创建不同的图像尺寸,这可能吗? 我需要在不加载图像的情况下即时创建图像。
2回复

在J2me中读写数据

我正在编写一个将用户数据存储到文件中的应用程序。 但是,当我尝试打开手机内存时,我的应用程序会引发安全异常,并且不允许我写入或读取数据。 这是我的代码。 但是我使用SDycard来保存数据,并且工作正常。 但是,当我尝试访问手机内存时,是否有任何解决方案可以摆脱SecurityE
1回复

在J2ME中编码GIF

我在J2ME中有一个Image对象,我想把它带到GIF中。 我已经找到了JPEG和PNG编码器,但我想知道是否可以用GIF格式编码我的Image,返回它的字节数组。 我正在做这样的事情: ... 最后我有一个Image对象。 现在我想把它编码为GIF,如: 我
3回复

J2ME中是否支持HTTP PUT?

我刚刚注意到MIDP 2.0 API中的一个奇怪的事情:HttpConnection类apidocs对方法GET,POST和HEAD进行显式引用,但没有其他方法。 这是否意味着他们不受支持? http://java.sun.com/javame/reference/apis/jsr118
3回复

J2ME中的HTTP身份验证

我正在尝试创建一个J2ME应用程序,它使用HttpConnection连接器与webserver进行通信。 当我与WebServer通信时,我必须使用Basic HTTP auth进行身份验证,这通常是这样的 http://username:password@website.com/r