标签: java-io

阅读一个简单的文本文件

我试图在我的示例Android应用程序中读取一个简单的文本文件.我使用下面编写的代码来读取简单的文本文件.

InputStream inputStream = openFileInput("test.txt");
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
Run Code Online (Sandbox Code Playgroud)

我的问题是:我应该将这个"test.txt"文件放在我的项目中?我已经尝试将文件放在文件夹下"res/raw","asset"但我得到了exception "FileNotFound"上面写的代码第一次执行时的执行.

谢谢您的帮助

android text-files java-io

115
推荐指数
5
解决办法
21万
查看次数

实现Closeable或实现AutoCloseable

我正在学习Java,我找不到关于implements Closeableimplements AutoCloseable接口的任何好的解释.

当我实现一个时interface Closeable,我的Eclipse IDE创建了一个方法public void close() throws IOException.

我可以在pw.close();没有界面的情况下关闭流.但是,我无法理解如何close()使用该接口实现该方法.而且,这个界面的目的是什么?

另外我想知道:我怎么检查是否IOstream真的关闭了?

我正在使用下面的基本代码

import java.io.*;

public class IOtest implements AutoCloseable {

public static void main(String[] args) throws IOException  {

    File file = new File("C:\\test.txt");
    PrintWriter pw = new PrintWriter(file);

    System.out.println("file has been created");

    pw.println("file has been created");

}

@Override
public void close() throws IOException {


}
Run Code Online (Sandbox Code Playgroud)

java java-io

113
推荐指数
6
解决办法
10万
查看次数

如何列出JAR文件中的文件?

我有这个代码从目录中读取所有文件.

    File textFolder = new File("text_directory");

    File [] texFiles = textFolder.listFiles( new FileFilter() {
           public boolean accept( File file ) {
               return file.getName().endsWith(".txt");
           }
    });
Run Code Online (Sandbox Code Playgroud)

它很棒.它使用目录"text_directory"中以".txt"结尾的所有文件填充数组.

如何 JAR文件中以类似的方式读取目录的内容?

所以我真正想做的是,列出我的JAR文件中的所有图像,所以我可以加载它们:

ImageIO.read(this.getClass().getResource("CompanyLogo.png"));
Run Code Online (Sandbox Code Playgroud)

(那个是有效的,因为"CompanyLogo"是"硬编码的",但JAR文件中的图像数量可以是10到200个可变长度.)

编辑

所以我想我的主要问题是:如何知道我的主类所在的JAR文件名称

当然,我可以使用它来阅读它java.util.Zip.

我的结构是这样的:

他们就像:

my.jar!/Main.class
my.jar!/Aux.class
my.jar!/Other.class
my.jar!/images/image01.png
my.jar!/images/image02a.png
my.jar!/images/imwge034.png
my.jar!/images/imagAe01q.png
my.jar!/META-INF/manifest 
Run Code Online (Sandbox Code Playgroud)

现在我可以使用以下命令加载例如"images/image01.png":

    ImageIO.read(this.getClass().getResource("images/image01.png));
Run Code Online (Sandbox Code Playgroud)

但只是因为我知道文件名,其余的我必须动态加载它们.

java jar file getresource java-io

107
推荐指数
9
解决办法
13万
查看次数

Eclipse IDE中的java.io.Console支持

我使用Eclipse IDE来开发,编译和运行我的Java项目.今天,我正在尝试使用java.io.Console该类来管理输出,更重要的是,用户输入.

问题是当应用程序"通过"Eclipse运行时System.console()返回null.Eclipse在后台进程上运行程序,而不是我们熟悉的控制台窗口的顶级进程.

有没有办法强制Eclipse将程序作为顶级进程运行,或者至少创建一个JVM将识别的控制台?否则,我被迫将项目放在jar上并在Eclipse外部的命令行环境中运行.

java eclipse console java-io

103
推荐指数
4
解决办法
9万
查看次数

如何只获取特定文件的父目录名称

如何ddd从test.java所在的路径名获取.

File file = new File("C:/aaa/bbb/ccc/ddd/test.java");
Run Code Online (Sandbox Code Playgroud)

java groovy java-io

103
推荐指数
5
解决办法
18万
查看次数

在Java中关闭嵌套流和编写器的正确方法

注意:这个问题及其大多数答案都发布在Java 7发布之前.Java 7提供了自动资源管理功能,可以轻松实现这一目标.如果您使用的是Java 7或更高版本,那么您应该转到Ross Johnson的答案.


什么被认为是在Java中关闭嵌套流的最佳,最全面的方法?例如,考虑设置:

FileOutputStream fos = new FileOutputStream(...)
BufferedOS bos = new BufferedOS(fos);
ObjectOutputStream oos = new ObjectOutputStream(bos);
Run Code Online (Sandbox Code Playgroud)

我理解需要保证关闭操作(可能使用finally子句).我想知道的是,是否有必要明确确保嵌套流已关闭,或者只是确保关闭外部流(oos)?

我注意到的一件事,至少在处理这个具体的例子时,内部流似乎只是抛出FileNotFoundExceptions.这似乎意味着技术上不需要担心如果失败就关闭它们.

这是同事写的:


从技术上讲,如果实施得当,关闭最外层的流(oos)就足够了.但实施似乎有缺陷.

示例:BufferedOutputStream从FilterOutputStream继承close(),它将其定义为:

 155       public void close() throws IOException {
 156           try {
 157             flush();
 158           } catch (IOException ignored) {
 159           }
 160           out.close();
 161       }
Run Code Online (Sandbox Code Playgroud)

但是,如果flush()由于某种原因抛出运行时异常,则永远不会调用out.close().所以看起来"最安全"(但很丑陋)主要担心关闭FOS,即保持文件打开.


什么被认为是最好的,当你绝对需要确定,关闭嵌套流的方法?

是否有任何正式的Java/Sun文档可以详细解决这个问题?

java java-io

92
推荐指数
6
解决办法
4万
查看次数

如何按字母顺序File.listFiles?

我有以下代码:

class ListPageXMLFiles implements FileFilter {

        @Override
        public boolean accept(File pathname) {
                DebugLog.i("ListPageXMLFiles", "pathname is " + pathname);

                String regex = ".*page_\\d{2}\\.xml";
                if(pathname.getAbsolutePath().matches(regex)) {
                        return true;
                }
                return false;
        }
}

public void loadPageTrees(String xml_dir_path) {
        ListPageXMLFiles filter_xml_files = new ListPageXMLFiles();
        File XMLDirectory = new File(xml_dir_path);
        for(File _xml_file : XMLDirectory.listFiles(filter_xml_files)) {
                loadPageTree(_xml_file);
        }
}
Run Code Online (Sandbox Code Playgroud)

FileFilter工作很好,但listFiles()似乎在上市相反的字母顺序的文件.是否有一些快速的方法listFile()来按字母顺序列出文件?

java java-io

89
推荐指数
1
解决办法
10万
查看次数

如何在内存中创建新的java.io.File?

如何File在内存中创建新的(来自java.io) - 而不是在硬盘上?

我正在使用Java语言.我不想将文件保存在硬盘上.

我遇到了糟糕的API(java.util.jar.JarFile).它期待String文件名的File文件.我没有文件(只有byte []内容)并且可以创建临时文件,但它不是很漂亮的解决方案.我需要验证签名jar的摘要.

byte[] content = getContent();
File tempFile = File.createTempFile("tmp", ".tmp");
FileOutputStream fos = new FileOutputStream(tempFile);
fos.write(archiveContent);
JarFile jarFile = new JarFile(tempFile);
Manifest manifest = jarFile.getManifest();
Run Code Online (Sandbox Code Playgroud)

任何有关如何在没有临时文件的情况下获得清单的示例将不胜感激.

我想现在这个问题不是偏离主题的

java file java-io

85
推荐指数
3
解决办法
8万
查看次数

如果目录不存在,则创建一个目录,然后在该目录中创建文件

条件是如果目录存在,它必须在该特定目录中创建文件而不创建新目录.

以下代码仅创建具有新目录但不适用于现有目录的文件.例如,目录名称将类似于"GETDIRECTION"

String PATH = "/remote/dir/server/";

String fileName = PATH.append(id).concat(getTimeStamp()).append(".txt");  

String directoryName = PATH.append(this.getClassName());   

File file  = new File(String.valueOf(fileName));

File directory = new File(String.valueOf(directoryName));

 if(!directory.exists()){

             directory.mkdir();
            if(!file.exists() && !checkEnoughDiskSpace()){
                file.getParentFile().mkdir();
                file.createNewFile();
            }
}
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
bw.write(value);
bw.close();
Run Code Online (Sandbox Code Playgroud)

java java-io

71
推荐指数
6
解决办法
18万
查看次数

获取java.net.SocketTimeoutException:连接在android中超时

我对android开发比较陌生.我正在开发一个Android应用程序,我正在向Web服务器发送请求并解析json对象.我经常java.net.SocketTimeoutException: Connection timed out在与服务器通信时遇到异常.有时它会毫无问题地完美运行.我知道这个问题在很多时候都被提出过.但我仍然没有得到任何满意的解决方案来解决这个问题.我正在下面发布我的logcat和app-server通信代码.

public JSONObject RequestWithHttpUrlConn(String _url, String param){

    HttpURLConnection con = null;
    URL url;
    String response = "";
    Scanner inStream = null;
    PrintWriter out = null;
    try {
        url = new URL(_url);
        con = (HttpURLConnection) url.openConnection();
        con.setDoOutput(true);
        con.setRequestMethod("POST");
        if(param != null){
            con.setFixedLengthStreamingMode(param.getBytes().length);
        }
        con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
        out = new PrintWriter(con.getOutputStream());
        if(param != null){
            out.print(param);
        }
        out.flush();
        out.close();
        inStream = new Scanner(con.getInputStream());

        while(inStream.hasNextLine()){
            response+=(inStream.nextLine());
        }
    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch …
Run Code Online (Sandbox Code Playgroud)

java android httpurlconnection java-io

68
推荐指数
3
解决办法
25万
查看次数