标签: fileinputstream

使用File对象初始化FileInputStream时获取FileNotFoundException

我试图使用File对象初始化FileInputStream对象.我在线上收到FileNotFound错误

fis = new FileInputStream(file);
Run Code Online (Sandbox Code Playgroud)

这很奇怪,因为我已经通过相同的方法打开这个文件多次执行正则表达式.

我的方法如下:

private BufferedInputStream fileToBIS(File file){

    FileInputStream fis = null;
    BufferedInputStream bis =null; 
    try {
        fis = new FileInputStream(file);
        bis = new BufferedInputStream(fis);
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }   
    return bis;
}
Run Code Online (Sandbox Code Playgroud)

java.io.FileNotFoundException:C:\ dev\server\tomcat6\webapps\sample-site(拒绝访问)
    java.io.FileInputStream.open(本机方法)
    java.io.FileInputStream.(未知来源)
    java
    控制器上的controller.ScanEditRegions.process(ScanEditRegions.java:64)
    处于controller.ScanEditRegions.tidyHTML(ScanEditRegions.java:38)
    的controller.ScanEditRegions.fileToBIS(ScanEditRegions.java:52)
    处的.io.FileInputStream.(未知来源) . .ScanEditRegions.visitAllDirsAndFiles(ScanEditRegions.java:148)
    在controller.Manager.main(Manager.java:10)

java filenotfoundexception bufferedinputstream fileinputstream

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

如何使用FileInputStream访问jar中的txt文件?

我知道这个getResourceAsStream()方法,但解析器读取文件存在问题,整个结构实现为期望a FileInputStream()getResourceAsStream()返回无法转换的输入流.对于这种情况,有没有简单的"修复"?

java inputstream fileinputstream

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

Java读取对象输入流到arraylist?

以下方法应该将二进制文件读入arrayList.但得到一个java.io.EOFException:

at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2553)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1296)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
at .... Read(Tester.java:400) 
at .... main(Tester.java:23)

main的第23行调用方法,第400行是下面的while循环.有任何想法吗?

private static void Read() {
    try {
        ObjectInputStream objIn = new ObjectInputStream(new FileInputStream("/file.bin"));
        while (objIn.readObject() != null) {
            list.add((Libreria) objIn.readObject());
        }
        objIn.close();
    } catch(Exception e) {
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

java fileinputstream

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

JAVA:FileInputStream和FileOutputStream

我对输入和输出流有这个奇怪的事情,我只是无法理解.我使用inputstream从这样的资源中读取属性文件:

Properties prop = new Properties();
InputStream in = getClass().getResourceAsStream( "/resources/SQL.properties" );
rop.load(in);
return prop;
Run Code Online (Sandbox Code Playgroud)

它找到我的文件并成功更新它.我尝试写这样的修改设置:

prop.store(new FileOutputStream( "/resources/SQL.properties" ), null);
Run Code Online (Sandbox Code Playgroud)

我收到奇怪的错误:

java.io.FileNotFoundException: \resources\SQL.properties (The system cannot find the path specified)
Run Code Online (Sandbox Code Playgroud)

那么为什么改变物业的道路呢?如何解决这个问题?我在Windows上使用Netbeans

java fileinputstream fileoutputstream

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

FileInputStream如何获取File的内容?

我有一个文件f,我需要将其影响到FileInputStream fs:

File f = new File("C:/dir/foo.txt");
FileInputStream fs = (FileInputStream)f;
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

Cannot cast from File to FileInputStream
Run Code Online (Sandbox Code Playgroud)

怎么能fs得到的内容f

java file fileinputstream

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

通过块读取文件块

我想一块一块地读一个文件.该文件被分成几个部分,存储在不同类型的媒体上.我目前所做的是调用文件的每个单独部分,然后将其合并回原始文件.

问题是我需要等到所有块都到达才能播放/打开文件.是否有可能在他们到达时阅读这些块,而不是等待它们全部到达.

我正在处理媒体文件(电影文件).

java io fileinputstream http-chunked

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

编译器如何有效地优化getline()?

我知道很多编译器的优化可能相当深奥,但我的例子非常简单,我想看看我能理解,如果有人知道它可以做什么.

我有一个500 MB的文本文件.我声明并初始化一个fstream:

std::fstream file(path,std::ios::in)
Run Code Online (Sandbox Code Playgroud)

我需要按顺序读取文件.它的制表符分隔,但字段长度未知,并且逐行变化.我需要对每一行进行的实际解析为总数增加了很少的时间(这真让我感到惊讶,因为我在getline的每一行上都在执行string :: find.我认为这很慢).

一般来说,我想搜索每一行的字符串,并在找到它时中止循环.为了我自己的好奇心,我也增加并吐出了行数,我确认这增加了一点时间(5秒左右),让我看看它是如何吹过短线并在长线上慢下来的.

我将文本作为标记eof的唯一字符串找到,因此需要搜索每一行.我在手机上这样做,所以我为格式化问题道歉,但这非常简单.我有一个函数将我的fstream作为参考,并将文本作为字符串找到并返回std :: size_t.

long long int lineNum = 0;
while (std::getline (file, line))
{
    pos = line.find(text);
    lineNum += 1;
    std::cout << std::to_string(lineNum) << std::endl;
    if (pos != -1) 
        return file.tellg():
 }
     return std::string::npos;
Run Code Online (Sandbox Code Playgroud)

编辑:lingxi指出在这里没有必要使用to_string,谢谢.如上所述,完全省略行号计算和输出可以节省几秒钟,这在我的预优化示例中占总数的一小部分.

这成功地遍历每一行,并在408秒内返回结束位置.尝试将文件放在字符串流中,或者省略整个循环中的所有内容(只是getline直到结束,没有检查,搜索或显示),我的改进很小.为字符串预留一个巨大的空间也无济于事.

似乎getline完全是驱动程序.但是......如果我使用/ O2标志(MSVC++)进行编译,我可以更快地获得26秒.此外,长线与短线没有明显的减速.很明显,编译器正在做一些非常不同的事情.没有我的抱怨,但有任何想法如何实现?作为练习,我想尝试让我的代码在编译器优化之前更快地执行.

我敢打赌它与getline操纵字符串的方式有关.是否更快(唉不能测试一段时间)只保留字符串的整个文件大小,并按字符读取,当我传递一个/ n时增加我的行号?此外,编译器会使用像mmap这样的东西吗?

更新:我今晚回家时会发布代码.看起来只是关闭运行时检查将执行从400秒降低到50秒!我尝试使用原始c样式数组执行相同的功能.我不是很有经验,但很容易将数据转储到字符数组中,并循环查找换行符或目标字符串的第一个字母.

即使在完全调试模式下,它也会在54秒内正确找到字符串.检查关闭26秒,优化20秒.因此,从我的非正式的临时实验看,字符串和流函数是运行时检查的牺牲品?我再次回到家时会再次检查.

c++ optimization fileinputstream

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

FileChannel 在资产文件夹中返回错误的文件大小

我正在尝试File使用FileInputStream.

这就是我创建的方式FileInputStream

AssetManager assetManager = getAssets();
AssetFileDescriptor fileDescriptor = assetManager.openFd(fileName);
FileInputStream inputStream = new FileInputStream(fileDescriptor.getFileDescriptor());
Run Code Online (Sandbox Code Playgroud)

之后,我试图从File这样的读取数据:

FileChannel fileChannel = inputStream.getChannel();

MappedByteBuffer mappedByteBuffer = fileChannel.map(FileChannel.MapMode.READ_ONLY, 0, fileChannel.size());
IntBuffer intBuffer = mappedByteBuffer.asIntBuffer();

int[] array = new int[intBuffer.limit()];
intBuffer.get(array);

inputStream.close();
fileChannel.close();
Run Code Online (Sandbox Code Playgroud)

但这不起作用。出于某种原因,fileChannel.size()返回了一个巨大的数字。我有一个正好 13 个字节长的测试文件,但fileChannel.size()返回 1126498!此外,如果我忽略大小并开始读取返回的字节,则根本不匹配我的测试文件!

那么这里发生了什么?有没有办法解决这个问题?

java android assets fileinputstream

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

IO java中的Skip()方法?

我知道skip(long)的方法FileInputStream跳过从该文件的起始位置字节,并将文件指针.但是如果我们想在文件中间只跳过20个字符,并且要读取文件的剩余部分,我们应该怎么做?

java io skip fileinputstream

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

使用协程读取和复制文件

我创建了以下应用程序来说明一些疑问。我在 Github 上的示例

在此示例中,我将文件复制到另一个包。

我的疑惑如下:

  1. 并行执行任务,是否可以返回取消之前完成的值?

  2. contentResolver.openInputStream (uri)当我使用 IO 上下文时,为什么会出现“不适当的阻塞方法调用”消息?

  3. 当我读取文件条目以复制到输出时,我总是检查作业状态,以便当取消此任务时,它会立即停止,创建的输出文件被删除并返回取消异常,这是正确的吗?

  4. 我可以限制执行的任务量吗?

我的onCreate:

private val listUri = mutableListOf<Uri>()
private val job = Job()

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    
    //get files from 1 to 40
    val packageName = "android.resource://${packageName}/raw/"
    for (i in 1..40) {
        listUri.add(Uri.parse("${packageName}file$i"))
    }
}
Run Code Online (Sandbox Code Playgroud)

我的按钮操作:

  //Button action
   fun onClickStartTask(view: View) {
        var listNewPath = emptyList<String>()
        CoroutineScope(Main + job).launch {
            try {
                //shows something in the UI - progressBar
                withContext(IO) {
                    listNewPath = listUri.map { …
Run Code Online (Sandbox Code Playgroud)

android asynchronous fileinputstream kotlin kotlin-coroutines

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