我正在编写一个自定义保险丝镜像文件系统(在Ubuntu中使用FUSE-JNA)。通过镜像我的意思是,它将读取并写入本地文件系统的目录。
我实现了getattr,create和read操作,如下所示。所有这些都很完美。
...
private final String mirroredFolder = "./target/mirrored";
...
...
public int getattr(final String path, final StatWrapper stat)
{
File f = new File(mirroredFolder+path);
//if current path is of file
if (f.isFile())
{
stat.setMode(NodeType.FILE,true,true,true,true,true,true,true,true,true);
stat.size(f.length());
stat.atime(f.lastModified()/ 1000L);
stat.mtime(0);
stat.nlink(1);
stat.uid(0);
stat.gid(0);
stat.blocks((int) ((f.length() + 511L) / 512L));
return 0;
}
//if current file is of Directory
else if(f.isDirectory())
{
stat.setMode(NodeType.DIRECTORY);
return 0;
}
return -ErrorCodes.ENOENT();
}
下面的create方法在镜像文件夹中创建新文件
public int create(final String path, final ModeWrapper mode, final FileInfoWrapper info)
{
File f = new File(mirroredFolder+path);
try {
f.createNewFile();
mode.setMode(NodeType.FILE, true, true, true);
} catch (IOException e) {
e.printStackTrace();
}
return 0;
}
读取方法从镜像文件夹中读取文件
public int read(final String path, final ByteBuffer buffer, final long size, final long offset, final FileInfoWrapper info)
{
String contentOfFile=null;
try {
contentOfFile= readFile(mirroredFolder+path);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
final String s = contentOfFile.substring((int) offset,
(int) Math.max(offset, Math.min(contentOfFile.length() - offset, offset + size)));
buffer.put(s.getBytes());
return s.getBytes().length;
}
但我的写操作无效。
以下是我的Write方法,该方法不完整。
public int write(final String path, final ByteBuffer buf, final long bufSize, final long writeOffset,
final FileInfoWrapper wrapper)
{
return (int) bufSize;
}
当我在调试器模式下运行时,路径参数显示Path = / .goutputstream-xxx(其中xxx是每次调用write方法时随机的字母数字)
请指导我如何正确实现写操作。
答案 0 :(得分:1)
只需写入您提供的文件名即可。 How do I create a file and write to it in Java?
您看到path=/.goutputstream-xxx
的原因是https://askubuntu.com/a/151124。这不是fuse-jna中的错误。