首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JCIFS向Windows共享写入权限错误

使用JCIFS向Windows共享写入权限错误
EN

Stack Overflow用户
提问于 2015-02-04 12:54:39
回答 1查看 1.4K关注 0票数 0

我正在编写一个简单的应用程序来将文件复制到本地Windows网络上的一个共享中,但是在执行代码时会发现下面的错误。我正在使用JCIFS库和SmbFileOutputStream。

代码语言:javascript
复制
java.lang.RuntimeException: An error occured while executing doInBackground()
        at android.os.AsyncTask$3.done(AsyncTask.java:300)
        at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
        at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
        at java.util.concurrent.FutureTask.run(FutureTask.java:242)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
        at java.lang.Thread.run(Thread.java:841)
 Caused by: java.lang.ExceptionInInitializerError
        at jcifs.UniAddress.<clinit>(UniAddress.java:62)
        at jcifs.smb.SmbFile.getFirstAddress(SmbFile.java:864)
        at jcifs.smb.SmbFile.connect(SmbFile.java:951)
        at jcifs.smb.SmbFile.connect0(SmbFile.java:880)
        at jcifs.smb.SmbFile.open0(SmbFile.java:972)
        at jcifs.smb.SmbFile.open(SmbFile.java:1006)
        at jcifs.smb.SmbFileOutputStream.<init>(SmbFileOutputStream.java:142)
        at jcifs.smb.SmbFileOutputStream.<init>(SmbFileOutputStream.java:97)
        at jcifs.smb.SmbFileOutputStream.<init>(SmbFileOutputStream.java:67)
        at com.ioxis.ian.pcupload.MainActivity$CopySMBFile.doInBackground(MainActivity.java:119)
        at com.ioxis.ian.pcupload.MainActivity$CopySMBFile.doInBackground(MainActivity.java:101)
        at android.os.AsyncTask$2.call(AsyncTask.java:288)
        at java.util.concurrent.FutureTask.run(FutureTask.java:237)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
            at java.lang.Thread.run(Thread.java:841)
 Caused by: java.lang.SecurityException: Permission denied (missing INTERNET permission?)
        at java.net.InetAddress.lookupHostByName(InetAddress.java:418)
        at java.net.InetAddress.getLocalHost(InetAddress.java:365)
        at jcifs.netbios.NbtAddress.<clinit>(NbtAddress.java:187)
            at jcifs.UniAddress.<clinit>(UniAddress.java:62)
            at jcifs.smb.SmbFile.getFirstAddress(SmbFile.java:864)
            at jcifs.smb.SmbFile.connect(SmbFile.java:951)
            at jcifs.smb.SmbFile.connect0(SmbFile.java:880)
            at jcifs.smb.SmbFile.open0(SmbFile.java:972)
            at jcifs.smb.SmbFile.open(SmbFile.java:1006)
            at jcifs.smb.SmbFileOutputStream.<init>(SmbFileOutputStream.java:142)
            at jcifs.smb.SmbFileOutputStream.<init>(SmbFileOutputStream.java:97)
            at jcifs.smb.SmbFileOutputStream.<init>(SmbFileOutputStream.java:67)
            at com.ioxis.ian.pcupload.MainActivity$CopySMBFile.doInBackground(MainActivity.java:119)
            at com.ioxis.ian.pcupload.MainActivity$CopySMBFile.doInBackground(MainActivity.java:101)
            at android.os.AsyncTask$2.call(AsyncTask.java:288)
            at java.util.concurrent.FutureTask.run(FutureTask.java:237)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
            at java.lang.Thread.run(Thread.java:841)
 Caused by: libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated with hostname)
        at libcore.io.Posix.getaddrinfo(Native Method)
        at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:61)
        at java.net.InetAddress.lookupHostByName(InetAddress.java:405)
            at java.net.InetAddress.getLocalHost(InetAddress.java:365)
            at jcifs.netbios.NbtAddress.<clinit>(NbtAddress.java:187)
            at jcifs.UniAddress.<clinit>(UniAddress.java:62)
            at jcifs.smb.SmbFile.getFirstAddress(SmbFile.java:864)
            at jcifs.smb.SmbFile.connect(SmbFile.java:951)
            at jcifs.smb.SmbFile.connect0(SmbFile.java:880)
            at jcifs.smb.SmbFile.open0(SmbFile.java:972)
            at jcifs.smb.SmbFile.open(SmbFile.java:1006)
            at jcifs.smb.SmbFileOutputStream.<init>(SmbFileOutputStream.java:142)
            at jcifs.smb.SmbFileOutputStream.<init>(SmbFileOutputStream.java:97)
            at jcifs.smb.SmbFileOutputStream.<init>(SmbFileOutputStream.java:67)
            at com.ioxis.ian.pcupload.MainActivity$CopySMBFile.doInBackground(MainActivity.java:119)
            at com.ioxis.ian.pcupload.MainActivity$CopySMBFile.doInBackground(MainActivity.java:101)
            at android.os.AsyncTask$2.call(AsyncTask.java:288)
            at java.util.concurrent.FutureTask.run(FutureTask.java:237)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
            at java.lang.Thread.run(Thread.java:841)
 Caused by: libcore.io.ErrnoException: getaddrinfo failed: EACCES (Permission denied)
            at libcore.io.Posix.getaddrinfo(Native Method)
            at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:61)
            at java.net.InetAddress.lookupHostByName(InetAddress.java:405)
            at java.net.InetAddress.getLocalHost(InetAddress.java:365)
            at jcifs.netbios.NbtAddress.<clinit>(NbtAddress.java:187)
            at jcifs.UniAddress.<clinit>(UniAddress.java:62)
            at jcifs.smb.SmbFile.getFirstAddress(SmbFile.java:864)
            at jcifs.smb.SmbFile.connect(SmbFile.java:951)
            at jcifs.smb.SmbFile.connect0(SmbFile.java:880)
            at jcifs.smb.SmbFile.open0(SmbFile.java:972)
            at jcifs.smb.SmbFile.open(SmbFile.java:1006)
            at jcifs.smb.SmbFileOutputStream.<init>(SmbFileOutputStream.java:142)
            at jcifs.smb.SmbFileOutputStream.<init>(SmbFileOutputStream.java:97)
            at jcifs.smb.SmbFileOutputStream.<init>(SmbFileOutputStream.java:67)
            at com.ioxis.ian.pcupload.MainActivity$CopySMBFile.doInBackground(MainActivity.java:119)
            at com.ioxis.ian.pcupload.MainActivity$CopySMBFile.doInBackground(MainActivity.java:101)
            at android.os.AsyncTask$2.call(AsyncTask.java:288)
            at java.util.concurrent.FutureTask.run(FutureTask.java:237)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
            at java.lang.Thread.run(Thread.java:841)

目标共享和文件夹为每个人设置了完全的控制权限(它位于Windows 2008服务器上)。我还在Windows 7工作站上尝试了一个共享文件夹,但也得到了相同的错误。下面是我的Android清单中的代码和权限。我为该应用程序启用了以下权限: ACCESS_NETWORK_STATE、ACCESS_WIFI_STATE、INTERNET

代码语言:javascript
复制
class CopySMBFile extends AsyncTask<String, String, String> {
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }
    @Override
    protected String doInBackground(String... f_url) {
        try {
            String fileContent = "This is a test file";
            try{
                String user = "myusername:mypassword";
                System.out.println("User: " + user);

                NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(user);
                String path = "smb://192.168.1.4/k/temp/fileName.txt";
                System.out.println("Path: " +path);

                SmbFile sFile = new SmbFile(path, auth);
                SmbFileOutputStream sfos = new SmbFileOutputStream(sFile);
                sfos.write(fileContent.getBytes());

                System.out.println("Finished attempt to write file");
            } catch (Exception e) {
                e.printStackTrace();
            }
        } catch (Exception e) {
            e.printStackTrace();
            Log.e("Connected", e.getMessage());
        }

        return null;
    }

代码语言:javascript
复制
<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.INTERNET"/>
</application>

对于如何解决(或进一步诊断)这个问题,有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-04 12:58:19

<uses-permission>元素移动为<application>的对等元素,而不是<application>的子元素。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28321946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档