简体   繁体   English

在J2ME中从文件中读取内容

[英]Reading Content from File in J2ME

I am trying to read the content of a file but it seems not to work. 我正在尝试阅读文件的内容,但似乎无法正常工作。 I surfed the net and found different implementations as shown(read(), read2(), readLine()) but each time a run the codes they all give a NullPointer exception. 我在网上浏览并找到了不同的实现,如图所示(read(),read2(),readLine()),但每次运行代码时,它们都会给出NullPointer异常。 Please what can I do to rectify this problem. 请问我该怎么做才能解决这个问题。

     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();
    }


    }

ISSUE: Referring to file using incorrect method ISSUE: 使用不正确的方法引用文件

getResourceAsStream(...) is for loading resources from the classpath either from your binary package (.jar) or the classpath directory. getResourceAsStream(...)用于从二进制包(.jar)或类路径目录中加载类路径中的资源。

So what it essentially means is, to read a file from the binary package use getClass().getResourceAsStream() and to read a file from the device's physical memory use FileConnection API's. 所以它本质上意味着, 从二进制包读取文件使用getClass()。getResourceAsStream()从设备的物理内存中读取文件使用FileConnection API。

You are trying to create the inputstream from the file schema of the type used in FileConnection hence it will not work. 您正在尝试从FileConnection中使用的类型的文件架构创建输入流,因此它将无法工作。 So to solve your problem you have replace the inputstream object initialization in the read(...) , read2(...) and readFile(...) with below code 因此,为了解决您的问题,您已使用以下代码替换read(...)read2(...)readFile(...)的inputstream对象初始化

InputStreamReader reader = new InputStreamReader(in); //here in is the method's input parameter of type InputStream //这里in类型为InputStream的方法的输入参数

and in execute(...) pass the file connection inputstream as below 并在execute(...)传递文件连接输入流,如下所示

readFile(c.openInputStream()); //here c is object of type FileConnection //这里c是FileConnection类型的对象

.

You might also want to consider these if you are testing your application in emulator / device 如果您在模拟器/设备中测试应用程序,则可能还需要考虑这些问题

  1. Make sure the System.getProperty("fileconn.dir.photos") returns NON NULL value 确保System.getProperty("fileconn.dir.photos")返回NON NULL
  2. The file is stored at appropriate location in the system 该文件存储在系统中的适当位置

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM