标签: java-io

到达EOS后重置Java Socket的InputStream

我正在尝试通过 TCP/IP 套接字连接两个单独的应用程序。在这种情况下,两个应用程序都不作为另一个应用程序的“客户端”运行,将它们描述为两个需要相互通信的独立服务器会更容易。

为了接收数据,我正在使用该InputStream.Read()函数,一旦它收到一个值,-1它就应该停止处理。然而,现在的问题是,如果另一组数据出现,则InputStream已经位于流末尾 ( EOS),因此所有正在发送的新数据都将被丢弃或忽略。我发现解决此问题的唯一方法是,一旦到达流结束,我关闭套接字并重新打开它,我认为这可能可以通过其他方式更好地处理。

如何重置 InputStream 以便为可能出现的下一组数据做好准备?

java sockets inputstream java-io

2
推荐指数
1
解决办法
2879
查看次数

java - 如何使用java中的线程读取和写入文件?

我正在编写一个应用程序,我需要从单个文件中读取块,每个块大约 512 字节。我还需要同时写入块。

其中一个想法我是BlockReader implements RunnableBlockWriter implements RunnableBlockManager同时管理读写器。

我在我发现的大多数示例中看到的问题是锁定问题和潜在的死锁情况。任何想法如何实现这一点?

java multithreading java-io

2
推荐指数
1
解决办法
2579
查看次数

带有HTTP上载的Java ProgressBar不会更新

我想让我jProgressBar在期间更新它的价值HTTP File Upload.我是Java新手,我不确定我做的是正确的事情,这是我的代码:

private static final String Boundary = "--7d021a37605f0";

public void upload(URL url, File f) throws Exception
{
    HttpURLConnection theUrlConnection = (HttpURLConnection) url.openConnection();
    theUrlConnection.setDoOutput(true);
    theUrlConnection.setDoInput(true);
    theUrlConnection.setUseCaches(false);
    theUrlConnection.setChunkedStreamingMode(1024);

    theUrlConnection.setRequestProperty("Content-Type", "multipart/form-data; boundary="
            + Boundary);

    DataOutputStream httpOut = new DataOutputStream(theUrlConnection.getOutputStream());


        String str = "--" + Boundary + "\r\n"
                   + "Content-Disposition: form-data;name=\"file1\"; filename=\"" + f.getName() + "\"\r\n"
                   + "Content-Type: image/png\r\n"
                   + "\r\n";

        httpOut.write(str.getBytes());

        FileInputStream uploadFileReader = new FileInputStream(f);
        int numBytesToRead = 1024;
        int availableBytesToRead;
        jProgressBar1.setMaximum(uploadFileReader.available());
        while ((availableBytesToRead = uploadFileReader.available()) …
Run Code Online (Sandbox Code Playgroud)

java swing file-upload jprogressbar java-io

2
推荐指数
1
解决办法
673
查看次数

递归查找目录中的所有文本文件

我试图获取目录中所有文本文件的名称.如果目录有子目录,那么我也想在那些文件中获取任何文本文件.我不知道如何让任何数量的子目录继续进行.

现在,下面的代码只获取当前目录中的所有文本文件以及目录中的子目录.对于找到的每个子目录,它还会查找任何文本文件和更深层次的子目录.问题是如果那些更深层次的子目录还有更深层次的子目录,那么我找不到所有的文本文件.这似乎是一个需要递归的问题,因为我不知道这会有多深.

到目前为止,这是我的代码:

File rootDirectory = new File(rootDir);
if (rootDirectory.isDirectory()) {
    System.out.println("Valid directory");

    File[] listOfFiles = rootDirectory.listFiles(); 
    for (int i = 0; i < listOfFiles.length; i++) {
        String iName = listOfFiles[i].getName();
        if (listOfFiles[i].isFile()) {
            if (iName.endsWith(".txt") || iName.endsWith(".TXT")) {
                System.out.println("File: "+iName);
            }
        }
        if (listOfFiles[i].isDirectory()) {
            System.out.println("Directory: "+iName);

            File[] subList = listOfFiles[i].listFiles();
            for (int j = 0; j < subList.length; j++) {
                String jName = subList[j].getName();
                if (subList[j].isFile()) {
                    if (jName.endsWith(".txt") || jName.endsWith(".TXT")) {
                        System.out.println("\tFile: "+jName);
                    }
                }
                if (subList[j].isDirectory()) …
Run Code Online (Sandbox Code Playgroud)

java recursion java-io

2
推荐指数
1
解决办法
6867
查看次数

将整个列表写入java中的文件

我正在开展一个大项目,我有超过100万行数据.数据分为各种文件,每个文件包含20,000行.现在逐行读取每个文件的数据,并将一些变量x连接到每一行.我将这些连接的字符串存储到数组列表中.然后将此数组列表逐行保存到输出文件中.

每个文件需要3-4分钟.无论如何都要ArrayList一次性将整个文件写入文件中,这样就不会花费那么多时间.或者有更快的方法吗?

以下是一些示例代码:

    List<String> outputData = new ArrayList<String>(); 
//Output arraylist containing concatenated data

writeLines(File outputFile,outputData); //The data is written to file
Run Code Online (Sandbox Code Playgroud)

什么是实现这项任务的最快方法?

java io file arraylist java-io

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

Java listFiles()默认读取目录中的文件的顺序是什么?

我制作了以下程序,它读取目录中的所有文件.所有文件名都由数字组成(例如10023134.txt).

File dir = new File(directoryPath);
File[] files = dir.listFiles();
for (File file : files)
    try {
        if ( !file.exists())
            continue;
        else if (file.isFile()) {
            // some process
        }
    } catch (Exception e) {}
Run Code Online (Sandbox Code Playgroud)

我想知道默认情况下读取目录中文件的顺序.

似乎程序既不按数字顺序也不按创建日期顺序读取文件.

java java-io

2
推荐指数
2
解决办法
700
查看次数

如果文件不存在,PrinterWriter 是否会创建文件?

我正在使用PrintWriter object文件如下:

PrintWriter pwriter = new PrintWriter("abc.txt");
Run Code Online (Sandbox Code Playgroud)

如果文件名abc.txt不存在,请告诉我是否会创建该文件名。

我试过了,它没有创建文件。但我想确认是否预期不创建文件。

java arrays printwriter java-io

2
推荐指数
1
解决办法
2962
查看次数

Java中获取文件所在驱动器的最佳方法是什么?

我一直在寻找一种方法来获取在 Windows 上找到文件的驱动器(例如 C://、E://),但我能想到的最好的方法是

.getAbsolutePath().getParent().getParent() etc.
Run Code Online (Sandbox Code Playgroud)

我想要的只是第一个字母,例如E:

实现这一目标的最佳方法是什么?

java file-io java-io

2
推荐指数
1
解决办法
7509
查看次数

创建 zip 文件而不写入磁盘

我正在开发一个 Springboot 应用程序,当用户下载一些报告时,它必须将一个 zip 文件返回到前端。我想创建一个 zip 文件而不将 zip 文件或原始文件写入磁盘。

我要压缩的目录包含其他目录,其中包含实际文件。例如,dir1 内部有 subDir1 和 subDir2,subDir1 将有两个文件 subDir1File1.pdf 和 subDir1File2.pdf。subDir2 里面也有文件。

通过在磁盘上创建物理文件,我可以轻松做到这一点。但是,我觉得在不写入磁盘的情况下返回这些文件会更优雅。

java java-io

2
推荐指数
1
解决办法
422
查看次数

使用java.io.File时出现NullPointerException

我试图使用这个程序来计算D:\驱动器中的所有文件,但是当我运行它时它会抛出异常.

package lmh;

import java.io.File;

public class FileList {

    static int fileNum = 0;
    static int directoryNum = 0;
    static int cannotRead = 0;

    public static void main(String[] args) {
        File f = new File("e:/");
        printFileStructure(f);
        System.out.println("result:");
        System.out.println("file number?" + fileNum);
        System.out.println("directory number?" + directoryNum);
        System.out.println("cannot rend:" + cannotRead);
    }

    public static void printFileStructure(File f) {
        File[] files = f.listFiles();
        for (int i = 0; i < files.length; i++) {
            if (files[i].isFile()) {
                if (files[i].canRead()) {
                    fileNum++;
                    System.out.println(files[i].getName());
                } else …
Run Code Online (Sandbox Code Playgroud)

java java-io

1
推荐指数
1
解决办法
8675
查看次数